CTFshow-PWN-前置基础(pwn6-pwn9)

1、pwn6

立即寻址方式结束后eax寄存器的值为?

截取关键代码

; 立即寻址方式
    mov eax, 11         ; 将11赋值给eax
    add eax, 114504     ; eax加上114504
    sub eax, 1          ; eax减去1

mov 用于赋值,将右边立即数加载到左边的寄存器 eax 中;

add 将寄存器 eax 中的值与立即数 114504 相加,并将结果存储回寄存器eax中;

sub 从寄存器eax中的值中减去1,并将结果存储回寄存器eax中。

简单算一下立即寻址方式结束后eax寄存器的值为:114514

因此 flag 为:ctfshow{114514}

(注意这里的 114514 是十进制,如果是十六进制的话一般会以0x开头的)

我们在 ida 中看看,找到对应代码:

选中使用快捷键 H 将十六进制值转为十进制

如果想转回十六进制,选中,使用快捷键 Q 即可;

此外,如果你想转成二进制,可以选中使用快捷键 B 。

2、pwn7

寄存器寻址方式结束后edx寄存器的值为?

截取关键代码

; 寄存器寻址方式
    mov ebx, 0x36d      ; 将0x36d赋值给ebx
    mov edx, ebx        ; 将ebx的值赋值给edx

将立即数0x36d加载到寄存器ebx中;

将寄存器ebx中的值(现在是0x36d)复制到寄存器edx中。

也就是说 edx 中的值也是 0x36d

因此 flag 为:ctfshow{0x36D}

同理我们可以在 ida 中找到对应位置的汇编代码

3、pwn8

直接寻址方式结束后ecx寄存器的值为?

 截取关键代码

; 直接寻址方式
    mov ecx, msg      ; 将msg的地址赋值给ecx

这里只有一个赋值操作,将 msg 的地址赋值给 ecx 

找到 ida 中的对应代码

双击跟进 dword_80490E8 

可以看到其地址为:80490E8

前面的 0 可以省略,但是这里是十六进制值,我们需要加上 0x 

 将该地址赋值给 ecx ,所以 flag 为:ctfshow{0x80490E8}

4、pwn9

寄存器间接寻址方式结束后eax寄存器的值为?

截取关键代码

; 寄存器间接寻址方式
    mov esi, msg        ; 将msg的地址赋值给esi
    mov eax, [esi]      ; 将esi所指向的地址的值赋值给eax

第一个同上,可以得到 esi 的值为:0x80490E8

但是注意第二个,并不是直接将地址赋给 eax,加了方括号,是告诉处理器要从寄存器 esi 指向的地址中读取数据,因此,这行代码的作用是将 esi 所指向的地址中的数据加载到 eax 寄存器中。

在 ida 中找到对应代码

 

方括号内部的内容被视为偏移地址,指示了要读取或写入的内存位置

双击跟进,找到其指向地址的值:636C6557h

结尾是 h 也是十六进制,因此 flag 为:ctfshow{0x636C6557} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My6n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值