2015-08-03 6 views
-2

В исходном коде программы я увидел следующее. Что делает этот код точно?Что означает эта сборка l?

.CODE 
FOO PROC 
    nop 
    nop 

    push rax 
    push rax 
    mov rax, 545h 
    mov [rsp+8], rax 
    pop rax 
    ret 
FOO ENDP 
END 

затем используется как это для длл экспорта:

extern "C" void __stdcall FOO(void); 
+0

Вы искали эти инструкции в [Руководстве Intel] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)? – Michael

+0

спасибо о ссылке^ – alex

ответ

1

Это толкает два значения, изменяет один из них, но только один выскакивает. Это оставляет одно значение для ret.

Непонятно, как это лучше, чем jmp 545h.

+0

что такое rsp + 8? и почему 2 раза и больше используют nop – alex

+0

Ночи ничего не делают, поэтому они должны либо правильно выровнять код, либо зарезервировать место для последующих модификаций. Возможно, некоторый код, который добавляется при загрузке dll. Адрес '[rsp + 8]' составляет 8 байтов от указателя стека, где и заканчивается первый толчок. –

Смежные вопросы