如何在程序集x86中打开文件

时间:2017-11-19 09:17:01

标签: file assembly system-calls access shellcode

我试图在程序集中打开本地文件(目标文件中的'flag'),以便编写漏洞利用脚本输出标志。但是,我在尝试打开文件时收到错误:“target:Too long long input:Success”。这是我加载和打开文件的代码:

    #include <sys/syscall.h>

   .globl main
   .bss
   .lcomm bfr, 1040
   .type main, @function
   .data
      filename:
         .string . "flag"
   main:
     mov %eax,0x5
     mov %ebx,filename
     mov %ecx,0x0
     int $0x80

     mov %ebx, %eax
     mov %eax, 0x3
     mov %ecx, bfr
     mov %edx, 1040
     int $0x80

1 个答案:

答案 0 :(得分:0)

对于发布在这篇文章中的任何人,我想写一个关于此代码中(愚蠢)错误的解释,以免混淆任何试图学习这个的人。这最初是用Intel语法编写的,这意味着第一个操作数将是目标,第二个操作数将是源,而在AT&amp; T(这是我需要使用的)中,第一个操作数是源第二个操作数是目的地。另一个问题是需要加载诸如0x5,0x0等的值作为实际值(即十进制5,十进制0)以便调用系统调用,例如打开,读取和写入。因此,有人提到0x5需要写成$ 0x5。或者,您也可以使用SYS_open直接调用系统调用。 (如果其他人想要添加这个免费的话,我只是想写一个快速的澄清,以防有人犯了错误,试图引用它。)