1.原始的链接方法 在讲静态链接与动态链接前,先看看原始的链接方法。比如编译如下代码: C /******** * test.c *********/ #include<stdio.h> int main() {     int num;     scanf("%d",&num); printf("ok %d\n",num); return 0; } 1234567891011 /********* test.c*******...

使用gdb动态调试代码想必大家都不陌生,但实际上gdb还有很多强大的功能,比如动态调试反汇编代码,基本功能并不比Windows下的OD差。先来一张动态调试反汇编代码的图:   只要使用tui参数即可: Vim gdb -tui filename 1 gdb -tui filename 进入之后可以通过layout切换窗口,...

leal指令有多种格式: leal  立即数,寄存器 这类指令就是将立即数装载至寄存器,比如 leal $0x01,%eax  这种情况下 和 movl $0x01,%eax 的效果是等价的 leal  地址,寄存器 leal指令的作用是将地址加载到寄存器,对于leal M,N而言,就是实现了 &M –> N 的功能,举几个具体例子: leal (%ebx), %eax ...

shellcode中如果存在0x00,那么在拷贝字符串时shellcode很有可能在中间部分被割断,为了防止shellcode被破坏,通常要去除shellcode中的0x00。去0的方法有很多,这里介绍一些常用的方法: 1. 异或操作去0 mov $0x0,$eax ---> xorl $eax,$eax 1 mov $0x0,$eax  --->  xorl $eax,$e...

esp指向栈顶元素(非空) ebp始终指向上一个栈帧的ebp(所有的ebp组成了一个单链表) push完成两步操作 1. 将esp向低地址移动一格(给要入栈的元素留空位) 2. 将元素存入栈中 pop同样完成两步操作,但是顺序和push相反  1. 将栈顶元素弹出  2. 将esp向高地址移动一格 通过+x(%ebp)来访问传给被调函数的参数,通过-x(%ebp)来访问函数内部的局部变量 给函数分配栈空间时通常会先分配一片...

+
跳转到评论