Как мне прочитать содержимое переменных стека в IDA?
Я заметил, что в стеке функции был выделен буфер символов. Это выглядит так:
.text:00401xxx Buffer= byte ptr -24h
Я знаю, что могу читать Dwords по адресам памяти, перейдя:
Dword(0x<address>)
Но как мне сделать то же самое для переменных стека? В частности, здесь я хотел бы иметь возможность прочитать весь буфер символов...
1 ответ
Решение
Юо может использовать модуль IDC IDA, есть много интересных функций.
Если вы хотите напечатать dword, это правильно:Dword(0x<address>)
Для сброса памяти, как указано выше, вы можете использовать следующую функцию:
**GetManyBytes(ea, size, use_dbg=False)<br>**
Parameters:
ea - linear address
size - size of buffer in normal 8-bit bytes
use_dbg - if True, use debugger memory, otherwise just the database
Пример:
GetManyBytes(0x<address>, 50, True)
Вы можете вызвать функцию времени выполнения, вы также можете использовать простой скрипт, например:
from idc import GetManyBytes
from struct import unpack
def simple_dump():
arr = []
for i in xrange(0, 2*SIZE_TO_DUMP, 2):
bytes = GetManyBytes(0x<address>+i,2)
arr.append(unpack("h", bytes)[0])
return arr
def main():
values = simple_dump()
Вы также можете использовать окна IDA Hex-View