当前位置:首页 > C语言与汇编语言对照分析
精选文档
可以看出嵌套的switch...case结构在汇编代码上是相对独立的,外层和内层switch结构有各自的跳转表。 外层跳转表:
内存跳转表(双重跳转表):
精选文档
根据跳转表中的地址项,也可以清楚的区分外层和内层的跳转分支。
三、 循环语句
a) for循环
汇编代码:
其中nop dword ptr[eax+00h] 为指令对齐,没有实际意义。循环的汇编实现为:
精选文档
b) while循环
汇编代码:
其中nop dword ptr[eax+eax+00h] 为指令对齐,没有实际意义。循环的汇编实现为:
精选文档
从上面可以看出,for和while结构的汇编实现几乎一摸一样,仅仅是使用的寄存器有些区别。实际逆向过程中将循环映射为for或者while结构都是可以的。同时还可以看出,循环有个明显的特征:往回跳转(向地址小的方向跳转),大部分情况下遇到往回跳转的指令就是循环,极少数如编译器代码结构优化生成的往回跳转不是循环除外。
四、 总结
语法结构对应的汇编代码与编译器有很大关系,同一份源代码不同编译器生成的汇编代码结构不一样;即使是同一个编译器,不同的编译选项生成的汇编代码结构也不尽相同。需要在逆向过程中慢慢熟悉编译器的特性。
(范文素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
共分享92篇相关文档