X64 反汇编程序 IDA 和 WINDBG。 IDA 不显示 x64 操作码

Posted

技术标签:

【中文标题】X64 反汇编程序 IDA 和 WINDBG。 IDA 不显示 x64 操作码【英文标题】:X64 Disassemblers IDA and WINDBG. IDA doesnt show x64 opcodes 【发布时间】:2015-02-14 22:58:18 【问题描述】:

所以我刚开始学习WINDBG,从ollydbg升级到64bit。在研究一些奇怪的事情时:在 WINDBG 上我看到所有 RXX 寄存器和操作码,而在 IDA 上我仍然看到 EXX 操作码,同时调试同一个 EXE(例如 notepad.exe) 有谁知道这是为什么? 示例:

WINDBG:

0:000> u notepad!_security_init_cookie L5

notepad!_security_init_cookie:    
00000000`ffaf3380 48895c2418      mov qword ptr [rsp+18h],rbx    
00000000`ffaf3385 57              push rdi    
00000000`ffaf3386 4883ec20        sub rsp,20h    
00000000`ffaf338a 488b05e7cc0000  mov rax,qword ptr [notepad!_security_cookie (00000000ffb00078)]    
00000000`ffaf3391 488364243000    and qword ptr [rsp+30h],0

国际开发协会:

___security_init_cookie proc near ; CODE XREF: _WinMainCRTStartupp    
.text:01003053 8B FF            mov edi, edi    
.text:01003055 55               push ebp    
.text:01003056 8B EC            mov ebp, esp    
.text:01003058 83 EC 10         sub esp, 10h    
.text:0100305B A1 10 C0 00 01   mov eax, ___security_cookie

或图片: 左边是WINDBG,右边是IDA

【问题讨论】:

虽然我可以在反汇编中发现一些相似之处,但机器码字节完全不同。你确定你在 WinDbg 和 IDA 中看到的是同样的东西吗? 【参考方案1】:

您的安装中包含两个版本的 IDA。请确认您使用的是 64 位版本的 IDA(例如 idaq64.exe)。

如果被反汇编的 PE 文件是 64 位的,并且所使用的 IDA 版本是为 64 位反汇编而设计的,那么您确实会看到正确的寄存器。如果不是,那么很可能这些条件之一不成立。

【讨论】:

我检查了两次和三次.. 我 100% 确定我在 windbg 和 IDA 上运行相同的 EXE 我也使用 x64bit ida 版本(我还在帮助菜单选项卡下检查以防万一) 【参考方案2】:

您已经在 IDA 中反汇编了 32 位记事本。

你是从system32打开notepad.exe吗?在这种情况下,IDA 获得了 32 位版本(因为它是 32 位可执行文件,因此受WoW64 filesystem redirection 约束)。

“修复”此问题的最简单方法是将文件从 system32 目录复制到其他位置并从那里打开。

【讨论】:

为什么会发生这种情况? (这是正确的)为什么它不影响windbg? 因为 IDA 是 32 位应用程序。

以上是关于X64 反汇编程序 IDA 和 WINDBG。 IDA 不显示 x64 操作码的主要内容,如果未能解决你的问题,请参考以下文章

《IDA Pro 权威指南》学习

Windbg + IDA:计算模块中的地址

c语言怎么反编译啊,教教我

如何把ida 的android

使用 IDA PRO 6.1 调试 x64 应用程序

谁能帮我把一个hex文件反编译为c语言文件?