2015-12-22 2 views
0

Внутри функции мы имеем следующее:Нужна помощь в понимании этого ASM кода в функции C

__asm__("movl $0xe4ffffe4, -4(%ebp)"); 

Означает ли это, что мы перемещаем содержимое адресной 0xe4ffffe4 памяти к регистру EBP?

+2

Это синтаксис AT & T. Возможно, звучит более знакомо как «mov dword [ebp-4], 0xe4ffffe4' в соответствии с синтаксисом Intel. –

ответ

5

Это:

movl $0xe4ffffe4, -4(%ebp) 

говорит «переместить значение 4 байта 0xe4ffffe4 в гнездо 4 байта перед адресом, сохраненным в регистре EBP.»

4

-4(%ebp) означает: 4 байта до адреса, хранящегося в ebp. Этот адрес обычно является первой локальной переменной. Префикс l movl означает «long», для целых чисел это означает 4 байта. Таким образом, ваш код означает: «переместите значение 0xE4FFFFE4 в первую локальную переменную размером 4 байта».

0

Посмотрите на этот документ. Речь идет о защите стека вызовов, помещая постоянное значение (канарейку) в ebp, запуская некоторый код, а затем проверяя, что константа все еще существует для обнаружения вредоносного поведения. http://www.coresecurity.com/files/attachments/StackGuard.pdf