我正在研究我的学校项目“ROP on ARM vs x86”
我已经在x86上完成了我的工作并且现在在ARM上尝试“ret2zp”,我需要帮助。
请帮助这样一个linux新手。
我正在关注ARM 'A Short Guid on ARM Exploitation' by Kumar & Gupta
上简单明了的例子在第41页,(我的名声缺乏发布img..sorry)
有一条线
(gdb)r'printf“AAAABBBBCCCCDDDD \ x38 \ x84”
所以Kumar& Gupta试图将char数组AAAABBBBCCCCDDDD&“(带有扩展的ascii代码。没有简单的ascii代码)
并且我不能使用'printf'命令将我的char数组放在我的代码的参数上;
这是我使用'printf'的简单代码。
buffer_overflow.c
#include <stdio.h>
#include <stdlib.h>
void IShouldNeverBeCalled(){
puts("I should never be called");
exit(0);
}
void Vulnerable(char *arg){
char buff[10];
strcpy(buff, arg);
}
int main(int argc, char **argv){
Vulnerable(argv[1]);
puts(argv[1]);
return(0);
}
,它可以作为
root@linaro:~# ./buffer_overflow AAAABBBB
AAAABBBB
root@linaro:~# ./buffer_overflow 'printf "A"'
printf "A"
所以printf没有像我预期的那样工作。
我如何使用'printf'作为Kumar&amp;古普塔这么说??
当我把“'printf”\ x41“'”时,我的程序怎么能得到参数“A”?
什么是printf?它在python上的功能是什么?或者是与ubuntu集成的程序?
哦,我的ubuntu是
root@linaro:~# cat /etc/issue
Ubuntu natty (development branch) \n \l
谢谢你的帮助。
答案 0 :(得分:0)
您正在使用撇号'
而不是反叛`
。此外,该文档缺少终止反引号。
不是使用反引号,而是应该使用更好的$()
并正确引用:
./buffer_overflow "$(printf "AAAABBBBCCCCDDDD\x38\x84")"
另请注意,他们在gdb中执行此操作,而不是在shell中执行此操作。