Внутри функции мы имеем следующее:Нужна помощь в понимании этого ASM кода в функции C
__asm__("movl $0xe4ffffe4, -4(%ebp)");
Означает ли это, что мы перемещаем содержимое адресной 0xe4ffffe4 памяти к регистру EBP?
Внутри функции мы имеем следующее:Нужна помощь в понимании этого ASM кода в функции C
__asm__("movl $0xe4ffffe4, -4(%ebp)");
Означает ли это, что мы перемещаем содержимое адресной 0xe4ffffe4 памяти к регистру EBP?
Это:
movl $0xe4ffffe4, -4(%ebp)
говорит «переместить значение 4 байта 0xe4ffffe4 в гнездо 4 байта перед адресом, сохраненным в регистре EBP.»
-4(%ebp)
означает: 4 байта до адреса, хранящегося в ebp
. Этот адрес обычно является первой локальной переменной. Префикс l movl
означает «long», для целых чисел это означает 4 байта. Таким образом, ваш код означает: «переместите значение 0xE4FFFFE4 в первую локальную переменную размером 4 байта».
Посмотрите на этот документ. Речь идет о защите стека вызовов, помещая постоянное значение (канарейку) в ebp, запуская некоторый код, а затем проверяя, что константа все еще существует для обнаружения вредоносного поведения. http://www.coresecurity.com/files/attachments/StackGuard.pdf
Это синтаксис AT & T. Возможно, звучит более знакомо как «mov dword [ebp-4], 0xe4ffffe4' в соответствии с синтаксисом Intel. –