NASM得到args并调用sys_execve

时间:2015-10-18 18:27:18

标签: linux x86 nasm

我试图编写一个带有两个参数的程序:可执行文件的路径和启动该可执行文件的参数。 例如:

  

$ ./program / 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

&#34; check_argc&#34;部分似乎有用,我用 puts 检查了它。

1 个答案:

答案 0 :(得分:1)

你的问题在于:

@Html.DropDownListFor(m => m.SelectedItem, Model.DDL)

主要的C原型是: mov ebx,[ebp+12] ; ebx <- argv[1] lea ecx,[ebp+12] ; ebx <- &argv[1] ,所以你正在做的事实上是:

int main(int argc, char** argv)

您想要做的事情如下:

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