IDA如何读取栈变量的内容?
How do I read the contents of stack variables in IDA?
我注意到在函数的堆栈上分配了一个字符缓冲区。它是这样的:
.text:00401xxx Buffer= byte ptr -24h
我知道我可以通过以下方式读取内存地址中的双字:
Dword(0x<address>)
但是,如何对堆栈变量执行相同的操作?特别是在这里,我希望能够读取整个字符缓冲区...
你可以使用idc IDA模块,有很多有趣的功能。
如果你想打印双字,这是正确的:
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 windows
我注意到在函数的堆栈上分配了一个字符缓冲区。它是这样的:
.text:00401xxx Buffer= byte ptr -24h
我知道我可以通过以下方式读取内存地址中的双字:
Dword(0x<address>)
但是,如何对堆栈变量执行相同的操作?特别是在这里,我希望能够读取整个字符缓冲区...
你可以使用idc IDA模块,有很多有趣的功能。
如果你想打印双字,这是正确的:
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 windows