2013-10-22 61 views
0

我的工作我的學校項目「ROP上ARM VS 86」獲取參數的字符爲ASCII碼

我已經做了在x86和現在試圖在ARM「ret2zp」我的工作,我需要幫助。

請幫助這樣的linux新手。


我下面就ARM方便利落例如'A Short Guid on ARM Exploitation' by Kumar & Gupta

在第41頁,(我的名聲是缺乏張貼img..sorry)

有一行
(GDB) R「的printf 「AAAABBBBCCCCDDDD \ X38 \ X84」

所以·庫馬爾·古普塔&試圖把字符數組AAAABBBBCCCCDDDD &「(帶有擴展ASCII碼。沒有什麼簡單的ASCII碼)

和我不能把我的字符數組放在我的代碼與'printf'命令的參數;

這裏是我使用'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); 
} 

和它的作品作爲

[email protected]:~# ./buffer_overflow AAAABBBB 
AAAABBBB 

[email protected]:~# ./buffer_overflow 'printf "A"' 
printf "A" 

這樣的printf不工作如我所料。

我該如何使用'printf'作爲Kumar & Gupta這樣說?

當我把「'printf'\ x41」'「放進去時,我的程序如何得到參數」A「?

那是什麼printf?它在python上的功能是什麼?或者它是與Ubuntu的程序集成?

噢,我的Ubuntu是

[email protected]:~# cat /etc/issue 
Ubuntu natty (development branch) \n \l 

謝謝你對我的幫助。

回答

0

您正在使用撇號'而不是反向`。此外,該文檔缺少終止反引號。

除了使用反引號的,但是,你應該使用更好$()和引用正確:

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

另外請注意,他們在gdb這樣做,而不是在一個外殼。