Как мне прочитать содержимое переменных стека в 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

Другие вопросы по тегам