pwn硬核基础知识

函数的传参

随着一学期的pwn的学习有好多东西都是半懂不懂今天就来重新深度的学习一下32位和64位函数传参的过程】

32位函数的传参

32位函数的参数主要是通过栈来传递的,所以在编写32位的相应payload时往往是不需要寄存器的参与的,同时他的参数会按照从右到左的顺序依次压入栈中(意思就是先进行函数的调用,再去添加函数的参数)

举一个关于通过write来泄露libc版本的payload编写例子

payload = b'a'*(n)+p32(write_plt) + p32(main) + p32(1) + p32(write_got) + p32(4)
  • 接收返回值时,只需要按照写入的字节数(这里是 4 个字节)来接收即可获取write函数的地址,如u32(r.recv(4))

64位函数的传参

首先我们要知道64位传参时调用寄存器的顺序

rdi>rsi>rdx>rcx>r8>r9

64位的传参主要是靠寄存器来传递的,所以在进行64位的传参时我们要将相应的参数先保存到寄存器中,在依次进行函数的调用,通俗易懂的将来说就是先将函数调用所需要的参数放入寄存器中保存好,然后在进行相应的函数的调用,同样以通过write函数来泄露libc版本的payload编写为例,我们来比较两者之间的区别所在,让我们对32位和64的传参有更加深刻的了解

payload = p64(pop_rdi)+p64(1)+p64(pop_rsi)+p64(wwrite_got)+p64(8)+p64(write_plt)+p64(main)

总结

ok那我们进行下关于函数调用的总结

用一句为我的话来总结:

32位情况下我们就是先进行函数的调用然后把参数写在最后

而64位的情况下我们要像厨师一样先将所需要的菜品(函数所需要的参数)准备好,然后进行大火的烹制(也就是函数的调用)。

mov ebp esp汇编指令的详解

定义:将esp的值复制到ebp中

我们重点来看什么是esp的值什么是ebp中

esp的值:

esp的值是指esp所在的地址(不是栈中的)

ebp中:

ebp中是指ebp所在的地址

总结

总体的效果就是将ebp拉到esp所在的位置,也就是ebp的地址变成了esp的地址。而mov指令的关键就是将后者的值复制到前者中去,而指针的值决定了其所在的地址。

无符号十六进制与有符号十进制的转换

1. 无符号十六进制到有符号十进制的转换

无符号十六进制数可以直接解释为有符号整数。如果该十六进制数表示的值超过了其位宽的一半,它将被视为负数。例如,对于一个32位整数:

  • 无符号十六进制数 0xE0E5B330 的十进制值为 3776957648
  • 由于这个值超过了 2^31 - 1(即 2147483647),它在有符号整数中表示为负数。

计算其有符号十进制值的方法是:

  1. 计算其无符号十进制值。
  2. 如果该值超过 2^31 - 1,则减去 2^32

对于 0xE0E5B330

  • 无符号十进制值为 3776957648
  • 有符号十进制值为 3776957648 - 4294967296 = -518009648

2. 有符号十进制到无符号十六进制的转换

有符号十进制数转换为无符号十六进制数的过程是逆向的。如果该数是负数,需要将其转换为补码形式。补码的计算方法是:

  1. 取该数的绝对值。
  2. 2^32 中减去该绝对值(对于32位整数)。

例如,对于 -521817296

  • 其绝对值为 521817296
  • 补码为 4294967296 - 521817296 = 3773149000
  • 3773149000 转换为十六进制为 0xE0E5B330

context

context是我们在编写pwn攻击脚本是常常用到的一个函数
context 主要用于:

  • 设置目标架构(arch)、操作系统(os)、位数(bits)、字节序(endian)。
  • 控制日志输出级别(log_level)。
  • 自动化生成与架构相关的 shellcodeROP 链等。
  • 管理终端类型(如 ssh 或本地执行)。

一般的pwn题都是使用的ubantu系统,所以这里给一个实例参考:

context(os='linux', arch='i386', log_level='debug')

这是一个经典的使用场景,记住这个也就可以了

如何给文件加权

chmod 777 是 Linux 和类 Unix 系统中用于修改文件或目录权限的命令。

作用

  • chmod:表示“change mode”,即修改权限。
  • 777:是一个权限模式,表示将文件或目录的权限设置为最高权限,具体含义如下:
    • 第一个数字(7):表示文件或目录的所有者(Owner)权限,7 表示可读(r)、可写(w)、可执行(x)。
    • 第二个数字(7):表示与该文件或目录所属用户组(Group)的权限,同样表示可读、可写、可执行。
    • 第三个数字(7):表示其他用户(Others)的权限,也是可读、可写、可执行。

使用场景

  • 文件权限:将文件的权限设置为对所有用户完全开放,任何人都可以读取、修改和执行该文件。
  • 目录权限:将目录的权限设置为完全开放,任何人都可以进入该目录、读取目录内容、修改目录内容(如删除文件、创建文件等)。
posted @ 2025-12-10 20:32  Mark_Dusk  阅读(2)  评论(0)    收藏  举报