本文主要是介绍CSAPP BOMB LAB part2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
bomb lab part2
phase3
将rsp+0xc存入rcx, 将rsp+0x8存入rdx, 地址0x4025cf存储格式,然后调用好sscanf函数,
当rsp+0x8的值大于0x7, 会跳转到400fad, 会boom!!! 所以rsp+0x8的值不大于0x7。
0x8+rsp的值不进入ja的代码段,会执行400f71对应的指令,之后执行400f75对应的指令,
jmpq *0x402470(,%rax,8) ==> 0x402470 + 8(rax)
设置rax为1, *0x402470(,%rax,8) ==> 0x402470 + 8 ,0x402478存储的值,400fb9,
400fb9 是 将0x137的值存储到eax, 比较第二个参数和eax的大小,等于跳转到400fc9
汇编语法
switch 汇编版本
switch 例子:
switch 使用 jump table
cmpl 指令
cmpl
指令是x86汇编语言中的一个比较指令,用于比较两个操作数的值。cmpl
指令的格式如下:
cmpl source, destination
source
和destination
可以是寄存器、内存地址或立即数。指令执行后,会将source
和destination
进行比较,并根据比较结果设置标志寄存器中的相应标志位。
cmpl
指令的比较结果会影响以下标志位:
ZF
(Zero Flag):如果两个操作数相等,则ZF
标志位被设置为1,否则为0。SF
(Sign Flag):如果结果为负数,则SF
标志位被设置为1,否则为0。CF
(Carry Flag):如果source
小于destination
,则CF
标志位被设置为1,否则为0。OF
(Overflow Flag):如果有符号操作数溢出,则OF
标志位被设置为1,否则为0。
以下是一些示例,演示了cmpl
指令的使用:
movl $10, %eax # 将10存储到eax寄存器
cmpl $5, %eax # 比较eax和5
在这个例子中,我们首先将立即数10存储到eax
寄存器中。然后,我们使用cmpl
指令将eax
和立即数5进行比较。比较结果会根据eax
和5的大小关系设置相应的标志位。
cmpl
指令可以与条件跳转指令(如je
、jne
、jl
等)结合使用,用于根据比较结果执行不同的代码路径。
使用cmpl指令比较var1和var2的值。根据比较结果,我们使用条件跳转指令来执行不同的代码块。如果var1大于var2,则跳转到greater标签处执行相应的代码块;如果var1小于var2,则跳转到less标签处执行相应的代码块;如果var1等于var2,则跳转到equal标签处执行相应的代码块。
请注意,cmpl
指令只比较操作数的值,并不修改操作数的内容。如果需要根据比较结果进行其他操作,可以使用条件跳转指令或其他指令来实现。
jg指令
jg指令的语法如下:
jg label
其中,label是一个标签,用于指定跳转的目标位置。
jg指令根据条件码寄存器的值来进行跳转。如果ZF为0且SF等于OF,则跳转到label指定的位置。
ja指令
ja
指令的语法如下:
ja label
其中,label
是一个标签,用于指定跳转的目标位置。
ja
指令根据条件码寄存器的值来进行跳转。如果ZF
为0且CF
为0,即无进位且不相等,则跳转到label
指定的位置。
下面是一个示例,展示了cmpl
指令和ja
指令的使用:
section .datavar1 dw 10var2 dw 20section .textglobal _start_start:mov ax, [var1]mov bx, [var2]cmpl ax, bxja greater; 如果var1 <= var2,则继续执行下面的指令; ...greater:; 如果var1 > var2,则跳转到greater标签处执行相应的代码块; ...; 继续执行下面的指令; ...end:; 结束程序mov eax, 1int 0x80
在上面的示例中,我们定义了两个变量var1
和var2
,并将它们的值分别设置为10和20。
然后,我们使用cmpl
指令比较var1
和var2
的值。如果var1
大于var2
,则跳转到greater
标签处执行相应的代码块;如果var1
小于等于var2
,则继续执行下面的指令。
最后,我们使用系统调用int 0x80
来结束程序。
这样,我们可以根据cmpl
指令的比较结果和ja
指令的条件跳转来执行不同的代码块。
工具介绍
参考链接
https://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/lectures/05-machine-basics.pdf
https://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/lectures/06-machine-control.pdf
https://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/lectures/07-machine-procedures.pdf
这篇关于CSAPP BOMB LAB part2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!