深大计系2实验三
一、 实验目标:
理解程序函数调用中参数传递机制;
掌握缓冲区溢出攻击方法;
进一步熟练掌握GDB调试工具和objdump反汇编工具。
二、实验环境:
计算机(Intel CPU)
Linux 64位操作系统
GDB调试工具
objdump反汇编工具
三、实验内容
本实验设计为一个黑客利用缓冲区溢出技术进行攻击的游戏。我们仅给黑客(同学)提供一个二进制可执行文件bufbomb和部分函数的C代码,不提供每个关卡的源代码。程序运行中有3个关卡,每个关卡需要用户输入正确的缓冲区内容,否则无法通过管卡!
要求同学查看各关卡的要求,运用\GDB调试工具和objdump反汇编工具**,通过分析汇编代码和相应的栈帧结构,通过缓冲区溢出办法在执行了getbuf()函数返回时作攻击,使之返回到各关卡要求的指定函数中。第一关只需要返回到指定函数,第二关不仅返回到指定函数还需要为该指定函数准备好参数,最后一关要求在返回到指定函数之前执行一段汇编代码完成全局变量的修改。
实验代码bufbomb和相关工具(sendstring/makecookie)的更详细内容请参考“实验四 缓冲区溢出攻击实验.ppt ...
IDA里反编译后出现的宏
0x01 不同编译器下数据类型宏GNU123456789defined(__GNUC__) typedef long long ll; typedef unsigned long long ull; #define __int64 long long #define __int32 int #define __int16 short #define __int8 char #define MAKELL(num) num ## LL #define FMT_64 "ll"
_MSC_VER12345defined(_MSC_VER) typedef __int64 ll; typedef unsigned __int64 ull; #define MAKELL(num) num ## i64 #define FMT_64 "I64"
BORLANDC 123456defined (__BORLANDC__) typedef __int64 ll; typedef ...
超级简单排序刷题
P1271 【深基9.例1】选举学生会12345678910111213141516171819#include<iostream>int m, n, temp;int vote[1000];int main(){ std::cin >> n >> m; for(int i = 0; i < m; i++){ std::cin >> temp; vote[temp]++; } for(int i = 1; i <= n; i++){ while(vote[i]--){ std::cout << i << " "; } } return 0;}
P1177 【模板】排序排序题,写一个快排练练手(填进去后超时了)
查了一下资料发现经典快排是会超时的(以第一个作为标签元素)
123456789101 ...
【buuctf】DontEatMe
0x01反调试拿到Ntdll的模块句柄,从句柄中查找ZwSetInformationThread的地址,然后调用这个函数去检查当前线程是否处于Debug模式下
1234ModuleHandleA = GetModuleHandleA("Ntdll"); ZwSetInformationThread = GetProcAddress(ModuleHandleA, "ZwSetInformationThread"); CurrentThread = GetCurrentThread(); ((void (__stdcall *)(HANDLE, _DWORD, _DWORD, _DWORD))ZwSetInformationThread)(CurrentThread, 17, 0, 0);
关于ZwSetInformationThread的类型:
123456typedef NTSTATUS(NTAPI* pZwSetInformationThread)( IN HANDLE ThreadHandle, ...
LC-3 汇编语言实验1求成绩等级
LC-3 汇编语言实验1求成绩等级实验内容(一) 实验描述
对学生的成绩使用数组进行排序
背景:一位老师需要你帮忙决定学生的成绩,她想要根据学生分数在班上的排名和考试分数一起决定学生最后的成绩等级。
具体要求:
a. 如果学生的分数排名在全班的25%之前,且考试分数达到85分及以上,则学生可以获得A
b. 如果学生不能拿A,但是分数排名在全班的50%之前,且考试分数达到75及以上,则学生可以获得B
c. 剩下的学生都是C
具体的情况:一共有16名学生,每名学生只有一个成绩
(二) 实验要求
(1)用汇编语言给这个班写一个成绩排序的程序
(2)你的程序必须给学生的分数排序,然后计算出获得A和B的学生人数。程序从x3000开始
(3)程序的输入
a. 班上16个学生的没有排序的成绩;
b. 每个分数是用16位无符号数表示的0~100的整数;
c. 分数存储在16个连续的内存位置-每一个位置一个分数;从x3200开始;
d. 最后一个分数的存储位置为x320F;
e. 你可以假设所有的分数相互之间不相同(每个分数是唯一的);
(4)程序的输出(你的程序必须有两个输出)
a. 16位学生的分数 ...
深大计系2实验三
0x01 phase_11234567890000000000400e70 <phase_1>: 400e70: 48 83 ec 08 sub $0x8,%rsp ;开辟8个字节的栈 400e74: be f8 1a 40 00 mov $0x401af8,%esi ;给寄存器%esi存入立即数0x401af8(传入参数,应该是运行时字符串的地址) 400e79: e8 bf 03 00 00 call 40123d <strings_not_equal> ;调用地址在0x40123d的函数<strings_not_equal> 400e7e: 85 c0 test %eax,%eax ;检查返回值%eax里是否为0 400e80: 74 05 je 400e87 <phase_1+0x17> ...