c - 如何使用 C 中的格式字符串攻击获取全局变量的内存地址?
问题描述
代码在这里:
#include <stdio.h>
#define NUM 0x11a
int data = NUM;
int main(int argc, char * argv[])
{
struct{
unsigned long memoryAddress;
char array[50];
} locals;
locals.memoryAddress= 2;
scanf("%lx", &locals.memoryAddress);
scanf("%49s", locals.array);
printf(locals.array);
data += 5;
printf("\n%d\n", data);
if(data != NUM + 0x5){
printf("Print me!\n");
}
return 0;
}
我应该得到"Print me!"
。这是格式字符串攻击,我使用%n
和 gdb。
那么如何获取数据的内存地址来覆盖它呢?
解决方案
推荐阅读
- javascript - 如何检查数组中的对象是否为空
- android - 为什么用户没有注册到我的 Realtime Firebase 数据库?
- arrays - 二维数组,打印迷宫,C
- android - 使用 Agora SDK for Android 进行屏幕共享无法正常工作,显示黑屏
- java - Spring Boot 无法在正确的端点上显示 .jsp 文件
- python - 使用 python 和 tkinter 跟踪文本中的光标移动
- android - Android:Google Play 控制台:新:更新现有应用程序的国家/地区列表
- python - 调用预测函数时,部署的 xgboost 模型失败并出现错误
- python - 如何在设置标头和 JSESSIONID 时通过请求获取数据
- 3d - 如何通过 3d 扫描将标记图像放置在所需位置