2016-11-22 3 views
0

Я замечаю, что буфер символа был выделен в стеке в функции. Это выглядит следующим образом:Как читать содержимое переменных стека в IDA?

.text:00401xxx Buffer= byte ptr -24h 

Я знаю, что я могу читать DWORDs по адресам памяти, перейдя:

Dword(0x<address>) 

Но, как я делаю то же самое для переменных стека? В частности, здесь я хотел бы прочитать весь буфер символов ...

ответ

0

Юо мог использовать модуль 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) 

Вы можете вызывать функцию runtime, вы можете использовать также простой скрипт вроде:

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

Смежные вопросы