Assembly 为什么程序在此指令下运行超出正常流

Assembly 为什么程序在此指令下运行超出正常流,assembly,reverse-engineering,instructions,Assembly,Reverse Engineering,Instructions,嗯,我参加了一个关于计算的学习课程,我们得到了一个可执行文件(PE)来分析特定的目的…当我跟踪指令以理解PE时,我遇到了一条异常指令“INT 1”,当我执行它时,程序进入“ntdll”运行一块指令,然后返回到原始位置(程序)但我注意到,在“INT 1”(即“XOR EAX,EBX”)之后的指令没有执行,直接从下面的指令开始(我使用OllyDBG),这整件事让我很难达到我的目的……所以请你帮我了解发生了什么 附言: 1-执行“INT 1”后EAX中的结果取决于来自用户输入的字(DWORD PTR[

嗯,我参加了一个关于计算的学习课程,我们得到了一个可执行文件(PE)来分析特定的目的…当我跟踪指令以理解PE时,我遇到了一条异常指令“INT 1”,当我执行它时,程序进入“ntdll”运行一块指令,然后返回到原始位置(程序)但我注意到,在“INT 1”(即“XOR EAX,EBX”)之后的指令没有执行,直接从下面的指令开始(我使用OllyDBG),这整件事让我很难达到我的目的……所以请你帮我了解发生了什么

附言:

1-执行“INT 1”后EAX中的结果取决于来自用户输入的字(DWORD PTR[ESI])

2-作者谈到了一个叫做“结构化异常处理和向量异常处理”的东西,它描述了我的情况,但我不太理解它

这是发生事情的指令块:

LODS DWORD PTR [ESI]       ;loads the 4 bytes user input into eax
MOV EBX,495F4265
INT 1                      ;our enemy 
XOR EAX,EBX                ;This one is not executed as shown in OllyDBG
CMP EAX,FF2CF8E5           ;eax content changes each time depending on user input
JE

要了解更多信息,请不要犹豫,请提前向我询问…Thnx:)

好吧,案例结束了…这只是一个结构化异常处理程序(SEH),它导致程序在正常流之外执行,并执行XOR指令(它没有被执行,因为IP增加了2,而它应该增加1,这样它才能被执行)

int1
是调试中断。我猜NTDLL修改返回地址以跳过该
XOR
语句。(有趣的事实:0x495f4265表示字符串
dB_I
)你引用的指令块在哪里?在NTDLL中还是在给你分析的可执行文件中?该块在可执行文件中…@RossRidge