攻击者是否有可能从已编译的代码中获取整数数组?
就像攻击者如何使用strings
命令从代码中获取字符串一样。
答案 0 :(得分:1)
是。 main.c
的简短示例:
int main(void) {
int vars[8] = {0,1,2,3,4,5,6,7};
}
然后gcc -O0 main.c -o main
禁用优化,因此我们未使用的数组不会被移除。然后,如果你只是拆解它:
0000000000400474 <main>:
400474: 55 push %rbp
400475: 48 89 e5 mov %rsp,%rbp
400478: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%rbp)
40047f: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%rbp)
400486: c7 45 e8 02 00 00 00 movl $0x2,-0x18(%rbp)
40048d: c7 45 ec 03 00 00 00 movl $0x3,-0x14(%rbp)
400494: c7 45 f0 04 00 00 00 movl $0x4,-0x10(%rbp)
40049b: c7 45 f4 05 00 00 00 movl $0x5,-0xc(%rbp)
4004a2: c7 45 f8 06 00 00 00 movl $0x6,-0x8(%rbp)
4004a9: c7 45 fc 07 00 00 00 movl $0x7,-0x4(%rbp)
从逻辑上讲,如果您的代码中有数据且程序使用了数据,则数据必须存在于某处。
答案 1 :(得分:0)