2017-2018-1 20155201 《信息安全系统设计基础》第五周学习总结

it2022-05-09  38

2017-2018-1 20155201 《信息安全系统设计基础》第五周学习总结

教材学习内容总结

一、Linux内核分析实验一

反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 int g(int x){ return x+3; } int f(int x){ return g(x); } int main(void){ return f(8)+1; }

通过输入gcc -S -o main.s main.c -m32将c程序编译成32位汇编代码cat main.s查看汇编码

查询资料知道:

eax:函数返回值保存寄存器 ebp:栈底指针寄存器 esp:栈顶指针寄存器(运行中的每个程序都有一段堆栈空间,用来存放程序运行中的数据) eip:当前指令位置寄存器 ······ 教材导读:程序的机器级表示 gcc -S xxx.c -o xxx.s获得汇编代码;想要64位机器上获得32位汇编代码gcc -m32 -S xxx.c

objdump -d xxx.o反汇编

不同数据的汇编代码后缀:

寄存器的理解:

寻址方式:操作数(operand)指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。第一种立即数,用来表示常数值;第二种寄存器表示某个寄存器的内容。第三种内存引用,根据计算出来的地址(有效地址)访问某个内存位置。有效地址的计算方式:Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

数据传送指令

算术与逻辑操作

汇编语言中的条件控制

## x in %rdi ,y in %rsi absdiff_se: cmpq %rsi, %rdi ##比较x,y jge .L2 ## if x>=y 跳转L2 addq $1, lt_cnt(%rip) ##lt_cnt++ movq %rsi, %rax %rsi送入%rax subq %rdi, %rax ##%rax-%rdi送入%rdi ret ##return .L2: addq $1, ge_cnt(%rip) ##ge_cnt++ movq %rdi, %rax ##向x传值 subq %rsi, %rax ##%rax-%rsi的值送入%rax ret ##return while循环## n in %rdi fact_do: movl $1,
转载请注明原文地址: https://win8.8miu.com/read-1489378.html

最新回复(0)