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