获取参数char作为ASCII码

时间:2013-10-22 20:53:14

标签: linux ubuntu printf

我正在研究我的学校项目“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
谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您正在使用撇号'而不是反叛`。此外,该文档缺少终止反引号。

不是使用反引号,而是应该使用更好的$()并正确引用:

./buffer_overflow "$(printf "AAAABBBBCCCCDDDD\x38\x84")"

另请注意,他们在gdb中执行此操作,而不是在shell中执行此操作。