链接汇编程序生成的obj文件 [英] linking assembler generated obj file

查看:0
本文介绍了链接汇编程序生成的obj文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在努力学习(或至少理解)Windows上的汇编。我在某个地方找到了这个Hello World示例,我想用它创建一个.exe文件,以确保所有内容都设置正确。 对于将发布其他Hello World示例的人,我想明确表示,我正在寻找具有直接Windows API调用的示例。

        global  _start
        extern  _ExitProcess@4
        extern  _GetStdHandle@4
        extern  _WriteConsoleA@20

        section .data
msg:    db      'Hello, World', 10
handle: db      0
written:
        db      0

        section .text
_start:
        ; handle = GetStdHandle(-11)
        push    dword -11
        call    _GetStdHandle@4
        mov     [handle], eax

        ; WriteConsole(handle, &msg[0], 13, &written, 0)
        push    dword 0
        push    written
        push    dword 13
        push    msg
        push    dword [handle]
        call    _WriteConsoleA@20

        ; ExitProcess(0)
        push    dword 0
        call    _ExitProcess@4

我是这样组装成功的

nasm -fwin32 hello.asm

然后,当我尝试将其与ID链接时,如下所示

ld hello.obj -lkernel32

它会生成一个可执行文件,但当我尝试运行它时,得到的结果是

Program 'a.exe' failed to run: The specified executable is not a valid application for this OS platform.At line:1 char:1
+ .a.exe
+ ~~~~~~~.
At line:1 char:1
+ .a.exe
+ ~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException
    + FullyQualifiedErrorId : NativeCommandFailed

我甚至下载了一个链接,但每当我尝试这样链接它时

ALINK hello.obj C:WindowsSystem32kernel32.dll

我得到此输出

ALINK v1.6 (C) Copyright 1998-9 Anthony A.J. Williams.
All Rights Reserved

Loading file .programshello.obj
Loading file C:WindowsSystem32kernel32.dll
Unsupported CPU type for module

我必须向链接器传递哪些标志,我做错了什么?

推荐答案

您链接错误。与FASM或EURO ASM不同,链接器ALINK不能从动态链接库动态获取导入信息,它需要一个导入库。ALINK附带了一个这样的库WIN32.lib,您也可以自己生成它。例如通过dll2lib或类似工具。

然后您应该修复源代码中的错误:

  1. 内存变量handlewritten应为DWORD,而不是字节。
  2. 从导入函数的名称中移除修饰。使用ExitProcess而不是_ExitProcess@4等,与Microsoft API doc
  3. 中定义的完全相同

使用

使您的可执行文件
nasm -fwin32 barbo24.asm
alink barbo24.obj WIN32.lib -oPE -entry _start -subsys con
barbo24.exe

如果没有写入Hello, world,请使用

进行检查和调试
peview.exe barbo24.exe
ollydbg barbo24.exe

这篇关于链接汇编程序生成的obj文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆