博客地址:http://blog.csdn.net/qq1084283172/article/details/53158970
return 0; C语言返回0语句的汇编形式
Intel-32汇编:
leave
xor eax, eax
ret
AT&T汇编:
leave
xorl %eax, %eax
ret
从汇编的结果可以看出,返回0的C语言语句,在编译器生成的汇编语句中并没有包含常量,这是编译器优化的结果,它认为复制零的操作比执行异或的运算更耗资源。
操作码与Shellcode:Shellcode其实是一系列的操作码,一般保存在C字符串数组里,,称它为shellcode主要是因为这一系列的操作码是执行shell(例如:/bin/sh或cmd.exe)所必须的指令。
Windows汇编语言中常用寄存器的介绍:
汇编语言中栈结构的学习:
汇编语言中堆结构的学习:
常用的汇编语言指令:
注意:jmp指令和call指令的区别(下面这2个指令真的很重要,要理解透彻)
jmp指令只是单纯的代码执行的跳转,call指令在执行的时候会先将保存下一条将要执行的地址即先保存CS:EIP的值,然后再进行代码执行流程的跳转。
注意 ret指令的执行步骤
ret指令在执行的时候,会先获取栈帧中保存的CS和EIP的值,恢复和设置CS和EIP的值,使程序的流程得以正常继续下去。
简单的做个笔记,本来打算打字敲一下笔记的,后来觉得太费时间了,直接截图了--方便。感觉这些知识点是逆向工程学习的基础,工作一段时间了,很多东西都没接触了,快忘了,简短的记录一下。
书籍参考:
《IDA Pro 代码破解解密》