相关疑难解决方法(0)

当我没有指定操作数大小时,push指令压入堆栈的字节数是多少?

我可以通过这样做将4个字节压入堆栈:

push DWORD 123
Run Code Online (Sandbox Code Playgroud)

但我发现我可以在push不指定操作数大小的情况下使用:

push 123
Run Code Online (Sandbox Code Playgroud)

在这种情况下,push指令将多少字节压入堆栈?推送的字节数是否取决于操作数大小(因此在我的示例中它将推送1个字节)?

x86 assembly

11
推荐指数
2
解决办法
7188
查看次数

如何在NASM中推送64位int?

我正在尝试推送一个64位整数但是在组装NASM时似乎想把它看成是一个DWORD而不是QWORD.

我正在使用ASM来创建shellcode,我需要将64位DLL注入到64位进程中.第一个QWORD是旧指令指针,第二个是包含DLL地址的地址,第三个是LoadLibrary的地址.占位符在运行时填充.

section .text
global _start   

_start:
BITS 64
PUSH QWORD 0xACEACEACACEACEAC
PUSHFQ
push rax
PUSH QWORD 0xACEACEACACEACEAC
MOV RAX, 0xACEACEACACEACEAC
CALL RAX
pop RAX
POPFQ
RETN
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 nasm

4
推荐指数
1
解决办法
1万
查看次数

nasm 64位推qword?

我似乎有一个有趣的问题,虽然我可能做了一些明显错误的事情.

我的问题是我试图将AAAABBBBCCCC推入堆栈,然后通过stdout打印它们.然而,似乎在我的x86_64环境中push 0x41414141推动了4141414100000000.

所以下面的代码块:

    global _start
    section .text
    _start:
    push 0x43434343  ; CCCC
    push 0x42424242  ; BBBB
    push 0x41414141  ; AAAA
    xor rax,rax      ; Zero RAX
    mov byte al,0x1  ; 1 for sys_write
    mov rdi,rax      ; 1 for stdout
    mov rsi,rsp      ; RSP for source
    mov byte dl,0xC  ; 12
    syscall          

    xor rax,rax      ; Zero RAX
    mov al, 0x3C     ; 60 for sys_edxit
    cdq              ; 0 for clean exit.
    syscall
Run Code Online (Sandbox Code Playgroud)

输出AAAABBBB,我认为只有8个字节,实际上是我要求的12个.通过管道传输到输出文件并以hexedit查看时,我注意到它正在显示414141410000000042424242.

我认为 …

64-bit assembly nasm

3
推荐指数
1
解决办法
5102
查看次数

标签 统计

assembly ×3

nasm ×2

64-bit ×1

x86 ×1

x86-64 ×1