Ida IDC 等同于 GDB /x 和 gdb /p,在地址和 IDA 语法怪癖处访问指针

Ida IDC equivalent of GDB /x and gdb /p, accessing pointer at address and IDA syntax quirks

我实在找不到这个问题的简单答案。我发现 IDC 文档令人困惑。我知道我可以调用 GetRegValue returns 一些我什至不明白的胡言乱语。例如:

36739244.  23098ACh   214114254o 000000000000000000000000000000000000010001100001001100010101100b

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

好吧,让我们看看那个地址有什么。有 UI。

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等)可以return地址处的值。

return 值只是使用不同表示法编写的相同值:分别是十进制、十六进制、八进制和二进制。

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

read_dbg_dword(read_dbg_dword(0x023098AC))