从 x64dbg 的机器码反查 IDA / Ghidra:精准定位 C 语言伪代码的方法
在实际逆向分析中,经常会遇到这样的情况:
-
在 x64dbg 中已经定位到关键汇编指令
-
但单纯看汇编逻辑不直观、不好理解
-
希望在 IDA 或 Ghidra 中查看对应的 C 语言伪代码
-
从 IDA / Ghidra → x64dbg
如果你的起点是 IDA 或 Ghidra 的 C 伪代码,想反查:
👉 x64dbg 中对应的汇编位置
本文介绍一种稳定、精准、实战中非常常用的方法:
👉 通过机器码(Opcode)在 IDA / Ghidra 中反查对应的反编译位置

一、问题场景说明
在 x64dbg 中调试时,定位到如下关键指令:
00007FF711BB17C8 | E8 61210000 | call <JMP.&memcmp>
这是一个对 memcmp 的调用,但:
-
汇编逻辑较为零散
-
参数、判断条件在汇编中不直观
-
希望直接查看 IDA / Ghidra 中的 C 伪代码
二、核心思路(重要)
不要用“汇编文本”去对齐反编译器
而是用:
✅ 机器码(Opcode)作为唯一稳定锚点
原因:
-
ASLR 会导致地址变化
-
反编译器重排指令
-
但 机器码本身不会变
三、从 x64dbg → IDA:通过机器码定位伪代码
1️⃣ 在 x64dbg 中获取机器码
目标指令:
E8 61 21 00 00
这是 call memcmp 对应的 完整 opcode
2️⃣ 在 IDA 中打开 Hex View
菜单路径:
View → Open subviews → Hex dump
在弹出的窗口中:
-
双击
Hex dump -
或选中后点击 OK
-
打开
Hex View-1

3️⃣ 使用机器码搜索(Alt + B)
在 IDA 中:
-
按下 Alt + B
-
弹出 Binary Search 窗口
-
在 Hex string 中输入:
E8 61 21 00 00
⚠ 注意事项:
-
每两位一个字节
-
中间必须有空格
-
顺序与 x64dbg 中完全一致
点击 OK。
4️⃣ 跳转到反汇编 / 伪代码位置
搜索成功后:
-
IDA 会跳转到对应汇编位置
-
按下 Tab 键
-
切换到 C 语言伪代码视图
你会看到类似:
if ( memcmp(a1, a2, v3) == 0 )
{
...
}
(📸 此处插图:IDA 伪代码中 memcmp 高亮)
至此,x64dbg 中的汇编已成功映射到 C 语言逻辑

四、从 x64dbg → Ghidra:通过机器码定位 C 代码
Ghidra 的流程类似,但有几个关键区别。
1️⃣ 打开内存搜索窗口
菜单路径:
Search → Memory...
会打开 Search Memory 窗口。
2️⃣ 输入机器码(⚠ 小端序)
仍然是这条指令:
E8 61 21 00 00
在 Ghidra 中需要注意:
-
不要输入空格
-
保持字节顺序
-
Ghidra 会自动识别 Byte Sequence
输入:
e861210000
确认 Byte Sequence 显示正确。
点击 Search 或 New Search。
3️⃣ 跳转并查看反编译代码
搜索结果列表中会出现匹配项:
Location Match Bytes Code Unit
1400017c8 e8 61 21 00 00 CALL VCRUNTIME140.DLL::memcmp
-
双击该条目
-
Ghidra 会跳转到对应位置
-
右侧反编译窗口中即可看到 C 语言代码
-
memcmp调用通常会被高亮显示
⚠ 注意:
-
Ghidra 没有明显提示
-
若出现多个匹配,需要结合上下文自行判断
五、反向操作:从 IDA / Ghidra → x64dbg
如果你的起点是 IDA 或 Ghidra 的 C 伪代码,想反查:
👉 x64dbg 中对应的汇编位置
IDA默认不显示机器码,如何打开:Options->General...
![]()


可以直接使用:
Ctrl + B(Binary Search)
步骤:
-
在 IDA / Ghidra 中定位目标 C 代码
-
查看其对应汇编指令
-
复制机器码(opcode)
-
按下 Ctrl + B
-
在十六进制输入框中:
-
不用输入空格
-
输入完整机器码
-
-
确定
会列出所有匹配位置:
-
通常数量很少
-
结合上下文几乎可以瞬间确认目标
-
非常适合配合 x64dbg 下断点
六、总结(实战建议)
✔ 不要试图“肉眼对齐汇编”
✔ 机器码才是跨工具的唯一稳定标识
推荐工作流:
x64dbg 定位关键逻辑
↓
复制机器码
↓
IDA / Ghidra 搜索
↓
查看 C 伪代码
↓
理解逻辑 / 还原算法
这套方法在:
-
Crack / Patch
-
算法还原
-
授权校验分析
-
游戏与壳逆向
中都非常实用。
下面和上面内容是一样的,下面有完整的图片,如果上面操作没问题就不用看了
00007FF711BB17C8 | E8 61210000 | call <JMP.&memcmp> |
我在x64dbg调试中找的关键汇编代码,但是汇编代码不好观察,想看对应的C语言代码,使用IDA或Ghidra就能查看
使用IDA查看打开菜单View->Open subviews->Quick view在窗口找到Hex dump双击或选中点击OK,会出现Hex View-1窗口
继续操作使用Alt+B快捷键,把E8 61210000机器码粘贴到String位置,并且每两位输入空格隔开,然后点击OK
就会找到
然后按一下键盘的Tab键,差不多就是这里了call 调用的memcmp,在C语言里也是调用了
在ghidra中找到对应的memcmp函数,在菜单Search->Memory...,Search Memory搜索窗口被打开,在Hex后输入机器码,注意需要调整输入小端字节序并且不能有空格,输入完后Byte Sequence会显示机器码,这里要和x64dbg中的机器码顺序和位置必须一样,然后点击Search或New Search,下面就会搜到双击搜索到的列表项,就会跳转到C语言代码并且高亮,注意没有提示,如果出现多个一样的需要你自己分辨那个是你想要的
| Location | Match Bytes | ... | ... | Code Unit |
| 1400017c8 | e8 61 21 00 00 | CALL VCRUNTIME140.DLL::memcmp |
6878

被折叠的 条评论
为什么被折叠?



