gpt4 book ai didi

assembly - MASM shellcode 和 NASM shellcode 之间有区别吗

转载 作者:行者123 更新时间:2023-12-02 19:20:21 26 4
gpt4 key购买 nike

我是 StackOverflow 的新手。最近,我开始学习汇编,对汇编相当陌生,对 shellcode 完全陌生。我正在使用 RadAsm 使用 MASM 汇编器进行编译,并尝试从该网站 Shellcoding for Linux and Windows 学习 shellcode

我在 Windows 64 位上使用 RadAsm。我使用的代码几乎是一样的,只不过我使用的是函数的绝对名称而不是DLL中函数的地址。 shellcode 应该使用带有参数 5000 的 sleep 函数。

这是我在 MASM 中使用的代码。

.386
.model flat, stdcall
option casemap:none

include kernel32.inc
includelib kernel32.lib

.code
_start:
xor eax, eax ; zero out eax
mov ebx, Sleep ; function sleep goes in ebx
mov ax, 5000 ; parameter goes in ax
push eax ; parameter on stack
call ebx ; call Sleep
end _start
end

MASM 中的汇编没有错误。

生成的shellcode有空值,与网站略有不同。如下。

我使用objdump -d nameofexecutable.exe来获取反汇编代码。

Disassembly of section .text
00401000 <.text>:
401000: 33 c0 xor %eax,%eax
401002: bb 0e 10 40 00 mov $0x40100e,%
401007: 66 b8 88 13 mov $0x1388,%ax
40100b: 50 push %eax
40100c: ff d3 call *%ebx
40100e: ff 25 00 20 40 00 jmp *0x402000

但在网站中,没有 00 十六进制代码。

Disassembly of section .text:

08048080 <_start>:
8048080: 31 c0 xor %eax,%eax
8048082: bb ea 1b e6 77 mov $0x77e61bea,%ebx
8048087: 66 b8 88 13 mov $0x1388,%ax
804808b: 50 push %eax
804808c: ff d3 call *%ebx

可能是因为我使用 x64 编译还是因为我间接调用该函数?

如有任何帮助,我们将不胜感激,谢谢。

最佳答案

您的代码被汇编为在 0x00401000 处运行,因此所有地址的最高字节最终为 0x00。他们的代码被汇编为在 0x08048080 处运行,因此所有地址的最高字节最终为 0x08。

这就是您所有零的来源。

关于assembly - MASM shellcode 和 NASM shellcode 之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25542426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com