Перевод cmp в сборке
Я новичок в сборке и столкнулся со следующим языком:
cmp 0x2c(%esp),%esi
Это явно пытается сравнить, но я не знаю, что такое 0x2c(%esp). Я использую GDB, поэтому команда для доступа к этому значению будет полезна. Следующая строка показывает, равны ли эти два значения.
2 ответа
Решение
Это синтаксис at&t. Вы можете переключить GDB на синтаксис Intel, используя set disassembly-flavor intel
чтобы получить более читаемый код. Вы можете проверить значение, используя, например, x/d $esp+0x2c
,
Я не знаком с синтаксисом вашего ассемблера, но я бы понял, что он сравнивает содержимое регистра ESI
с содержимым ячейки памяти в (указатель стека + 2C шестнадцатеричный)