小编Rom*_*ski的帖子

NASM 汇编程序 - 生成的机器代码中不需要 66

  • 操作系统:Windows 10
  • CPU:英特尔酷睿i5-5300U
  • 架构:x64

我刚开始学习汇编语言。我用的是在线编译器,但今天我下载了NASM。我试图组装这个简单的代码,将 10 乘以 15:

mov eax, 0xa
mov edx, 0xf
imul eax, edx
ret
Run Code Online (Sandbox Code Playgroud)

尝试执行由 NASM 生成的机器代码失败,因此我在十六进制编辑器中打开此代码并将其与我可以成功执行的在线汇编程序生成的代码进行比较。

纳姆:

66 b8 0a 00 00 00 66 ba 0f 00 00 00 66 0f af c2 c3
Run Code Online (Sandbox Code Playgroud)

在线编辑:

b8 0a 00 00 00 ba 0f 00 00 00 0f af c2 c3
Run Code Online (Sandbox Code Playgroud)

这两个代码之间的唯一区别66是 NASM 生成的代码中不需要的 。谁能帮我?

x86 assembly nasm

5
推荐指数
1
解决办法
81
查看次数

指向不带 .data 部分的独立二进制代码中的字符串的指针

我正在尝试编写某种漏洞利用程序,但在使我的 asm 代码在堆栈上的任何位置运行时遇到问题。就是这样:

BITS 64

global _start
_start:

  mov rax, 59

  jmp short file
  c1:
  pop rdi

  jmp short argv
  c2:
  pop rsi

  mov rdx, 0

  syscall
  ret

file:

  call c1
  db '/bin/sh',0

argv:

  call c2
  dq arg, 0  <- problem

arg:

  db 'sh',0
Run Code Online (Sandbox Code Playgroud)

由于选定的行,此代码将无法在堆栈上的任何位置工作,因为此代码可以在堆栈上的任何位置执行,因此 nasm 无法正确计算 arg 的地址。(这是shellcode 在作为单独代码单独运行时以及在使用 C++ 代码运行时调用不同系统调用的后续操作,这是问题所在。)

我已经轻松地用 jmp/call/pop 技巧替换了字符串,但指向字符串的指针仍然存在问题。

assembly x86-64 nasm execve shellcode

2
推荐指数
1
解决办法
985
查看次数

REP INSW 做什么?

我需要从端口读取一些 16 位值并将它们保存到缓冲区。我正在使用的教程建议使用 REP INSW 指令,但我不知道如何使用它,甚至不知道它是如何工作的......

这条指令相当于两条IN指令吗?

io x86 assembly x86-64 nasm

2
推荐指数
1
解决办法
1239
查看次数

标签 统计

assembly ×3

nasm ×3

x86 ×2

x86-64 ×2

execve ×1

io ×1

shellcode ×1