相当于GDB/x和GDB/p的Ida-IDC,访问地址处的指针和Ida语法怪癖



我无法找到这个问题的简单答案。我发现IDC文档令人困惑。我知道我可以调用GetRegValue,它会返回一些我甚至不理解的胡言乱语。例如:

36739244.  23098ACh   214114254o 000000000000000000000000000000000000010001100001001100010101100b

第一个是?!第二个是存储在寄存器中的地址,但为什么在末尾出现h?!第三个不知道是什么。第4个是二进制地址(哇,谢谢(。

好吧,让我们看看那个地址是什么。这是有用户界面的。

Stack[00000184]:023098AC db    8
Stack[00000184]:023098AD db 0D9h
Stack[00000184]:023098AE db  30h ; 0
Stack[00000184]:023098AF db    2
Stack[00000184]:023098B0 db  33h ; 3
Stack[00000184]:023098B1 db  4Dh ; M
Stack[00000184]:023098B2 db 0C9h
Stack[00000184]:023098B3 db  6Ch ; l
Stack[00000184]:023098B4 db 0C4h
Stack[00000184]:023098B5 db  98h
Stack[00000184]:023098B6 db  30h ; 0

同样,h被附加到每个字节。我不明白这是什么意思。那么,为什么要在某些字节前面加0呢?C4就是C4,0是什么意思。

这就是语法怪癖。有一个指针存储在那个地址。我希望能够方便地访问它,而不必复制粘贴字节和删除尾部的h。

最后,我希望能够查看内存中任何地址的值,类似于在GDB中调用x/16bx。或者打印一个地址或立即值,类似于p在GDB中的工作方式。

非常感谢您的帮助。

首先,正如Peter所说,语法部分是我的错误,在很大程度上与IDA无关。

其次,函数read_dbg_byte、read_dbg_word等(以及相应的get_wide_byte等(可以返回地址处的值。

返回值是使用不同符号编写的相同值:分别为十进制、十六进制、八进制和二进制。

最后,您可以使用以下内容来取消引用指针:

read_dbg_dword(read_dbg_dword(0x023098AC))

相关内容

  • 没有找到相关文章

最新更新