0

学校のプロジェクト「ROP on ARM vs x86」に取り組んでいます

x86 で作業を完了し、現在 ARM で 'ret2zp' を試していますが、助けが必要です。

そんなLinux初心者を助けてください。


Kumar & Gupta による ARM の簡単できちんとした例'A Short Guid on ARM Exploitation' に従っています

41 ページに (私の評判は img..sorry を投稿する

には不十分です) 行
(gdb) r 'printf "AAAABBBBCCCCDDDD\x38\x84"

があります。 . 単純な 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」をどのように使用できますか??

"'printf "\x41"'" を入力したときに、プログラムが引数 "A" を取得するにはどうすればよいですか?

そのprintfは何ですか?それはPythonで何か機能していますか?それともubuntuと統合されたプログラムですか?

ああ、私のubuntuは

root@linaro:~# cat /etc/issue
Ubuntu natty (development branch) \n \l

助けてくれてありがとう 。

4

1 に答える 1

0

'backtick の代わりにアポストロフィを使用しています`。さらに、ドキュメントには終了のバッククォートがありません。

ただし、バッククォートを使用する代わりに、適切な方$()を使用して適切に引用する必要があります。

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

また、シェルではなくgdbでこれを行っていることに注意してください。

于 2013-10-22T21:43:32.420 に答える