【发布时间】:2021-07-09 10:27:48
【问题描述】:
我有一个名为exploit.c的文件,其中:
#include <stdbool.h>
#include <stdio.h>
const char y1 = 'a';
const char y2 = 'b';
const char y3 = 'x';
const char y4 = 'y';
const char y5 = 'i';
const char y6 = 'j';
char x1 = 'f' ^ 'a';
char x2 = 'l' ^ 'b';
char x3 = 'a' ^ 'x';
char x4 = 'g' ^ 'y';
char x5 = 'y' ^ 'i';
char x6 = '-' ^ 'j';
int main() {
bool c = false;
if(c) { printf("The flag is: %c%c%c%c%c%c%c%c%c%c%c\n", x1 ^ y1, x2 ^ y2, x3 ^ y3, x4 ^
y4, x4 ^ y4, x5 ^ y5, x6 ^ y6, x1 ^ y1, x2 ^ y2, x3 ^ y3, x4 ^ y4); }
return 0;
}
我知道我可以通过改变 c 的值来打印出标志。但我想通过组装/执行来做到这一点。如何在不更改布尔值但使用 gcc 和 gdb 的情况下打印标志?
【问题讨论】:
-
使用一堆打印命令,例如
p/c x1 ^ y1(假设编译器没有优化这些命令)。您还可以覆盖程序计数器,以便执行到printf。 -
@Jester 是的,我想覆盖 bool c 但问题是我不知道该怎么做
-
从教程“如何使用 GDB”开始... -- GDB 有内置帮助,使用命令“help”。
标签: c debugging assembly gcc gdb