我在拆解代码时做错了什么

时间:2010-11-28 14:32:42

标签: windbg sos

我正在尝试在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]  

知道我可能做错了吗?

2 个答案:

答案 0 :(得分:0)

尝试: .lines L + S

在命令窗口中。还要确保加载符号。您可以使用lm命令显示已加载的模块。

答案 1 :(得分:0)

您的商家信息是完全有效的本机代码反汇编。 “int 2Eh”部分告诉我它是执行系统调用的代码:

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

这意味着代码最有可能出现在ntdll.dll中,这是系统库的作用。指令指针指向“ret”。我猜测之前的指令是“sysenter”,实际发生的是应用程序刚刚退出(它是通过进行系统调用来实现的)。当应用程序退出时,您的调试器将获得与断点命中时相同的控制权。

请仔细查看在应用程序退出之前您的断点未达到的原因。