【问题标题】:Declare Functions in ASM x86 FASM assembler在 ASM x86 FASM 汇编器中声明函数
【发布时间】:2013-01-24 02:21:41
【问题描述】:

我第一次尝试组装.. 我跳过了 helloworld 并决定直接潜入并做一个 CRC32Checksum :l

现在我很困惑哈哈..

我的尝试:

format PE console                                ;Format PE OUT GUI 4.0
entry main

include 'macro/import32.inc'

section '.idata' import data readable           ;Import Section.
library msvcrt,'msvcrt.dll'
import msvcrt, printf, 'printf',\
exit,'exit', getchar, 'getchar'

section '.data' data readable writeable         ;Constants/Static Section.
InitialValue dd 0

section '.code' code readable executable
main:
   jmp CRC32Checksum     ;I want to change this to a call [CRC32Checksum]..
   call [getchar]
   mov eax, 0
   ret 0


CRC32Checksum:
   push ebx
   mov ebp, esp
   mov eax, InitialValue
   NOT eax
   pop ebx
ret

如何调用我的 CRC32Checksum?我什至走在正确的轨道上吗?如何在程序集中声明函数?

【问题讨论】:

  • 我正在尝试用参数声明函数..

标签: assembly fasm


【解决方案1】:

简单使用:

call CRC32Checksum

在 FASM 中,方括号中的内容表示间接寻址。

“call [CRC32Checksum]”表示“调用地址位于CRC32Checksum变量的过程。在实践中,您会得到编译器错误“未指定操作数大小”,因为标签CRC32Checksum是代码标签并且没有分配大小。(您可以使用“call dword [CRC32Checksum]”来覆盖它,但这里当然没有意义)。

请注意,您通过间接调用调用导入的函数“getchar”。这是因为导入的函数实际上是包含导入函数地址的双字变量。

【讨论】:

    【解决方案2】:

    Flat Assembler 网站上有一份关于 Windows 编程的指南。里面有documentation如何用proc宏制作程序。

    或者只是 call 一个标签,通过堆栈或寄存器向例程提供任何你想要的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2020-09-23
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多