Мой вопрос касается RET Урны инструкции в 64-битный режим и их размер операнда, который определяет, сколько информации выставляется из стека в RIP и сколько байтов увеличивается на RSP.Какой размер операнда должен установить значение RET?
Я заметил, что некоторые ассемблеры оставляют установленный по умолчанию размер операнда по умолчанию. т.е. 64 бита для около возвращения и 32 бита для дальнего возврата:
1 ; Assembled with NASM 2.12 command "nasm TestRET.asm -l TestRET.lst"
2 BITS 64
3 00000000 66CF IRETW ; Opsize 16.
4 00000002 CF IRETD ; Opsize 32.
5 00000003 48CF IRETQ ; Opsize 64.
6 00000005 66CF o16 IRET ; Opsize 16.
7 00000007 CF o32 IRET ; Opsize 32.
8 00000008 48CF o64 IRET ; Opsize 64.
9 0000000A CF IRET ; Opsize 32, default.
10
11 0000000B 66CB o16 RETF ; Opsize 16.
12 0000000D CB o32 RETF ; Opsize 32.
13 0000000E 48CB o64 RETF ; Opsize 64.
14 00000010 CB RETF ; Opsize 32, default.
15
16 00000011 66C3 o16 RETN ; Opsize 16.
17 00000013 C3 o32 RETN ; Opsize 32 should not be available, NASM error?
18 00000014 48C3 o64 RETN ; Opsize 64, REX.W ignored as RETN is promoted to 64 bits.
19 00000016 C3 RETN ; Opsize 64, default.
Я не испытывал при написании вызовов затворов и задаче затворах, но я думаю, что размер операнда по умолчанию должен соответствовать размеру сегмента, который 64 в случае 64-битного режима.
Какие операционные размеры программисты ожидают от ассемблера в 64-битном режиме, когда они используют IRET, RETF, RETN без дополнительной спецификации?
Кто знает? Я сомневаюсь, что кто-то сделал опрос. Каков ваш реальный вопрос? –
@RossRidge Должна ли моя программа переводить RETF как CB или 48CB? – vitsoft
Ваша программа является ассемблером? Я не думаю, что это будет иметь большое значение, действительно нет никакой причины кодировать отдаленный доход в 64-битном коде. Также RETF официально не является инструкцией, поэтому, если вы ее задокументируете, вы можете делать все, что захотите. –