linux怎么安装espc软件,操作系统分析所需的相关基础知识 Foundations For Hacking Linux based on X86/Linux...

Foundations For Hacking Linuxbased on X86/Linux0512-68839303E-mailmengning@ustc.edu.cnhttp://staff.ustc.edu.cn/~mengning18850420135

AgendaCC

CC

espstack pointerebpbase pointerpush 432pop 4ebpCespebpesp

cs : eip/cs : eipcallcs : eipcs : eipretcs : eipcs : eip

// call target// pushl %ebp movl %esp, %ebp

// movl %ebp,%esp popl %ebp ret// //do sth.call1eipA2eipAeip

call xxxcallcallcs : eip call cs : eip xxxxxx pushl %ebp movl %esp, %ebpxxxmovl %ebp,%esppopl %ebpretespebpcs : eipespebpespebpesp

test.c

C mainp1p2

gcc g test.ctestobjdump Stest

p2testp2int p2(int x,int y){push %ebpmov %esp,%ebpreturn x+y;mov 0xc(%ebp),%eaxadd 0x8(%ebp),%eax}movl %ebp,%esppop %ebpretebpespebpespebpyx

p2z=p2(x,y); pushl 0xfffffff8(%ebp) pushl 0xfffffff4(%ebp) call 804839b add $0x8,%esp mov %eax,0xfffffffc(%ebp)printf("%d=%d+%d\n",z,x,y); pushl 0xfffffff8(%ebp) pushl 0xfffffff4(%ebp) pushl 0xfffffffc(%ebp) push $0x8048510 call 80482b0 p2mainespebpyxebpcs:eipespebpespesp

mainint main(void){push %ebpmov %esp,%ebpsub $0x18,%esp char c='a'; movb $0x61,0xfffffff3(%ebp)int x,y,z;x=1; movl $0x1,0xfffffff4(%ebp)y=2; movl $0x2,0xfffffff8(%ebp)ebpebpespebpespespc=ax=1y=2

eipeipeipeipmainp1(c)p2(x,y)p1

p2

mainp2p1eipespmainceipeipeipp1espeipeipeipxyeipp2eipmainp1p2

mainp2p2p1

eipeipeipeipmainp2(x,y)p1

p2p1(c)mainp2p1eipespmainespeipeipxyeipp2eipeipeipeipceipp1espmainp1p2

C

#include

int main(){/* val1+val2=val3 */unsigned int val1 = 1;unsigned int val2 = 2;unsigned int val3 = 0;printf("val1:%d,val2:%d,val3:%d\n",val1,val2,val3);asm volatile("movl $0,%%eax\n\t" /* clear %eax to 0*/"addl %1,%%eax\n\t" /* %eax += val1 */"addl %2,%%eax\n\t" /* %eax += val2 */"movl %%eax,%0\n\t" /* val2 = %eax*/: "=m" (val3) /* output =m mean only write output memory variable*/: "c" (val1),"d" (val2)/* input c or d mean %ecx/%edx*/);printf("val1:%d+val2:%d=val3:%d\n",val1,val2,val3);

return 0;}

int (*f) (int x); /* */f=func; /* funcf */

void FileFunc() { printf(FileFunc\n); }

void EditFunc() { printf(EditFunc\n); } void (*funcp)(); void FileFunc(); void EditFunc();

main() { funcp=FileFunc; (*funcp)(); funcp=&EditFunc; funcp(); }

CPUCPU intel x86 CPU0-3Linux03

csCPUcs:eip cseipLinux0xc00000000x000000000xbfffffff:

vs /intcs:eip

324GBLinux3G3G4G4KB

Linux3G//

HomeworkCC32x86Linux

Tony HoareLinux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值