西城顺德网站建设,网站开发网上教学,宝塔 wordpress,重庆网站制作1000week04 一、汇编-1二、汇编-2 一、汇编-1 1 通过输入gcc -S -o main.s main.c -m32 将下面c程序”week0401学号.c“编译成汇编代码 int g(int x){ return x3; } int f(int x){ int i 学号后两位#xff1b; return g(x)i; } int main(void){ return f(8)1; } 2. 删除汇编代码… week04 一、汇编-1二、汇编-2 一、汇编-1 1 通过输入gcc -S -o main.s main.c -m32 将下面c程序”week0401学号.c“编译成汇编代码 int g(int x){ return x3; } int f(int x){ int i 学号后两位 return g(x)i; } int main(void){ return f(8)1; } 2. 删除汇编代码中 . 开关的代码提交f 函数的汇编代码截图图中用矩形标出函数栈帧的形成和销毁的代码 #includestdio.hint g(int x){return x3;
}int f(int x){int i31;return g(x)i;
}
int main(void){return f(8)1;
}使用以下代码进行汇编
gcc -S -o week040120232831.s week040120232831.c -m32结果如下出错发现没有用32位编译的包 使用代码安装32位的编译包
sudo apt-get install gcc-multilib再次编译
查看week040120232831.s文件发现很杂乱
因此需要删除多余的辅助代码而这些辅助代码就是类似“.size”等“.”开头的文件。通过以下代码即可删除所有“.”开头的辅助代码且删除后的代码如下
sed -i /[.]/d week040120232831.sf 函数的汇编代码截图如下
用矩形标出函数栈帧的形成和销毁的代码如下
二、汇编-2
1 通过输入gcc -S -o main.s main.c 将下面c程序”week0402学号.c“编译成汇编代码 int g(int x){ return x3; } int f(int x){ int i 学号后两位 return g(x)i; } int main(void){ return f(8)1; }
参考http://www.cnblogs.com/lxm20145215----/p/5982554.html使用gdb跟踪汇编代码在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交截图。
代码如下
#includestdio.hint g(int x){return x3;
}int f(int x){int i31;return g(x)i;
}
int main(void){return f(8)1;
}
编译代码如下
gcc -S -o week040220232831.s week040220232831.c生成week040220232831并进行gdb不生成无法进行gdb调试
gcc -g week040220232831.c -o week040220232831 -m32进行gdb调试
gdb week040220232831一路按照以下输入进行gdb调试
b main
r
disassemble
i r
display /i $pc
si
i r
si
x/i $pc
si
x/i $pc
i r
x /4a 0xffffd118
si
x/i $pc
i r
x /4a 0xffffd118
disassemble 以上即结束x /4a 0xffffd118中的16进制数是ebp的物理地址 在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。图如下所示