簡體   English   中英

NASM獲取args並調用sys_execve

[英]NASM getting args and calling sys_execve

我正在嘗試編寫一個帶有兩個參數的程序:可執行文件的路徑和用於啟動該可執行文件的參數。 例:

$ ./程序/ bin / ping 127.0.0.1

但是我編寫的代碼似乎沒有執行任何操作,您能告訴我我做錯了什么嗎?

global main

section .text
main:
  push ebp
  mov ebp, esp
check_argc:
  mov eax, [ebp + 8] ; eax <- argc
  cmp eax, 1
  jg do_execve
  jmp done
do_execve:
  mov eax,11 ; linux system call number (11) - sys_execve
  mov ebx,[ebp+12] ; ebx <- argv[1]
  lea ecx,[ebp+12] ; ebx <- &argv[1]
  mov edx,0
  int 0x80
done:
  leave
  ret

編輯:

對於編譯,我使用了:

$ nasm -f elf32 program.asm

$ gcc -lc -m32 program.o -o program.exe

“ check_argc”部分似乎正常工作,我使用puts對其進行了檢查。

您的問題出在這里:

  mov ebx,[ebp+12] ; ebx <- argv[1]
  lea ecx,[ebp+12] ; ebx <- &argv[1]

main的C原型是: int main(int argc, char** argv) ,所以實際上您正在做的是:

  mov ebx,[ebp+12] ; ebx <- argv = &argv[0]
  lea ecx,[ebp+12] ; ecx <- &argv

您要執行的操作類似於以下內容:

  mov ecx, [ebp+12] ; ecx <- &argv[0]
  add ecx, 4        ; ecx <- &argv[1]
  mov ebx, [ecx]    ; ebx <- argv[1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM