2010-11-28 91 views
0

我正在尝试在Naveen的博客http://naveensrinivasan.com/2010/06/11/piracy-in-net-code-%e2%80%93-part-3-%e2%80%93-even-when-the-code-is-obfuscated/提供的代码示例。
当他运行!u ($ip)命令时,他得到了一个很好的反汇编,但是当我尝试运行同样的事情时,我似乎碰到了一些无法反汇编的非托管代码。我做错了反汇编代码

0:000> !u ($ip) 
Unmanaged code 
77555e74 c3    ret 
77555e75 8da42400000000 lea  esp,[esp] 
77555e7c 8d642400  lea  esp,[esp] 
77555e80 8d542408  lea  edx,[esp+8] 
77555e84 cd2e   int  2Eh 
77555e86 c3    ret 
77555e87 90    nop 
77555e88 55    push ebp 
77555e89 8bec   mov  ebp,esp 
77555e8b 8da42430fdffff lea  esp,[esp-2D0h] 

任何想法我可能做错了什么?

回答

0

您的列表是完全有效的反汇编本机代码。该“2Eh中断”的部分告诉我,这是执行系统调用代码:

http://www.codemachine.com/article_syscall.html

这意味着该代码是最有可能的ntdll.dll中,这是系统库,他们的工作,这是。指令指针指向“ret”。我猜测前面的指令是一个“sysenter”,实际发生的是应用程序刚刚退出(这是通过进行系统调用来完成的)。当应用程序退出时,您的调试器将获得像断点一样的控制权。

请仔细看看为什么断点在应用程序退出前没有打到。

0

尝试: .lines L + S

在命令窗口

。同时确保您的符号已加载。您可以使用lm命令显示加载的模块。