PWN基础知识总结

这篇博客总结了CTF PWN类题目中涉及的C语言与汇编参数传递、栈的细节以及64位程序参数传递的知识点。文章深入探讨了栈的特性,包括其在函数调用中的作用,以及如何通过push和pop操作进行栈的管理。此外,还讨论了64位系统中参数传递的不同方式,强调了在栈上分配局部变量的方法和参数压栈的顺序,有助于理解漏洞利用时Payload的构造。
摘要由CSDN通过智能技术生成

0x00 Intro

这里记录一些在CTF PWN类题目经常要考虑的技术点,是一些与C/ASM相关,比较底层的东西。总结来说有:

  • C和汇编之间的参数传递
  • 栈的细节
  • 64位程序参数传递
    只有对这些细节都清楚了,那么利用时,如何构造Payload就没有想象中那么困难了。这里目前还是只限于x86-64架构。

0x01 C和汇编之间的参数传递

有编译器基础的都知道,GCC将C语言编译为机器语言中间有几个过程。

  1. 预处理(将宏展开)
  2. 汇编(将C代码转为汇编代码)
  3. 编译(将汇编转为机器码)
  4. 链接(将静态库,多个源文件.o,进行合并,得到可执行文件)
    也就是说C的一级是汇编。当使用IDA工具反汇编得到伪代码时,有时,需要反复交叉查阅,汇编和C代码。所以有必要熟悉下汇编和C的参数传递之间的对应关系。
    C和汇编的函数调用的语法不太一样。所以转换过程需要留意。
    举个例子来说:
func(a1, a2);

这是一个C语言中的函数调用。如果是汇编,则会是这个样子

pushl $a2
pushl $a1
call func

可以看到,汇编语言中,程序员要手动将参数压入栈中。X86架构下,最后一个参数先压栈,然后是倒数第2个,为什么是这个样子,以及如何记住。在下一个环节说栈的细节时,会详细说下。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值