1)如果要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。2)如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数导致的堆栈变化。 含义就是 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call ...
在做一道题是,当scanf的字符串是 d 时,用str xfc 会输入修改成功。 当scanf的字符串是 s 时,用p xfc 会输入修改成功。 想了很久,才明白。 用pwn脚本时,用str 发送数据是模拟交互输入,比如str xfc 会发送过去 这个字符串,就相当于我们与程序交互时,输入了 这个数字,所以可以用 d 来读取,并用小端序存储 用p 发送数据时,是发送的字节流,也就是比特流 二进制流 ...
2022-02-14 12:16 0 1404 推荐指数:
1)如果要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。2)如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数导致的堆栈变化。 含义就是 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call ...
环境:kali,python3 程序没有开启随机化 没有canary保护 启动了NX IDA: 运行程序,先输入1200,然后给出函数地址,再次输入内容。 思路: 函数地址在IDA反汇编可以看出来,是atoi函数的地址,是got表中的地址。也就是函数运行过程中,在内存中 ...
//给定一个整数n(1<=n<=1000000000),要求从个位开始分离出它的每一位数字,从个位开始按照从低位到高位的顺序依次输出每一位数字(奥赛一本通p64 4题) //第一种解法 ,用到了stringstream,没用to_string,因为dev5.92版本不支持这个命令 ...
标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。 1. c_str():生成一个const char*指针,指向以空字符终止的数组。 注: ①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用 ...
linux_64与linux_86的区别 linux_64与linux_86的区别主要有两点: 首先是内存地址的范围由32位变成了64位 但是可以使用的内存地址不能大于0x00007fffffffffff,否则会抛出异常。 其次是函数参数的传递方式发生了改变,x86中参数都是保存在栈 ...
pwn是个英语里的拟声词,对应中文是” 砰 “的一声,指的是撞击或重物落地的声音。属于黑客界的俚语,术语是break ...
base64 原理 base64就是对二进制数据进行编码,比如我有6字节的二进制数据,然后每3个字节分为一组,也就是一组有3*8 = 24bit(1个字节由8位二进制数组成) ,然后把这个 24bit 分为4组,也就是每一组有6个bit。其实说白了base64就是将二进制数据每6个bit分为 ...
PWN的基础 一、PWN的由来 CTF比赛主要表现以下几个技能上:逆向工程、密码 学、ACM编程、Web漏洞、二进制溢出、网络和取证等。在国际CTF赛事中,二进制溢出也称之为PWN。 PWN是一个黑客语法的俚语词,自"own"这个字引申出来的,这个词的含意在于,玩家 ...