gpt4 book ai didi

optimization - 如何消除汇编程序可执行文件的膨胀?

转载 作者:行者123 更新时间:2023-12-03 16:53:31 25 4
gpt4 key购买 nike

我在 Gas 中使用了多平台 Hello World 代码, NASM , 和 YASM ,并且我想将它们对应的可执行文件从 76KB 缩小到对于 Hello World 汇编程序更合理的内容,因为基本的 Hello World C 程序导致了 80KB 的可执行文件,并且程序集应该小得多。我相信大部分可执行文件都充满了来自链接器选项的垃圾。

痕迹:

LIBS=c:/strawberry/c/i686-w64-mingw32/lib/crt2.o -Lc:/strawberry/c/i686-w64-mingw32/lib -lmingw32 -lmingwex -lmsvcrt

ld ld -o $(EXECUTABLE) hello.o $(LIBS)

hello.exe
Hello World!

代码:
.data

msg: .ascii "Hello World!\0"

.text

.global _main

_main:

pushl $msg
call _puts

leave
movl $0, %eax
ret

如果我删除 LIBS 中的任何选项,链接过程会失败,或者生成的可执行文件在运行时会引发 Windows 错误。所以合乎逻辑的做法是替换 puts使用更简单的方法调用,例如 sys_write, 但我不知道如何做这个多平台 .网上的小文档说使用 int 0x80执行对内核的调用,但这仅适用于 Linux,不适用于 Windows,而且我希望我的汇编代码是多平台的。

最佳答案

您的程序膨胀主要来自 C 运行时库。在 Windows 中,如果您编写自己的“微型”CRT,一个简单的 hello world 程序可以小于 5K。这是一个项目的链接,该项目解释了有关如何将 EXE 缩小到尽可能小的大小的所有详细信息:

http://www.codeproject.com/Articles/15156/Tiny-C-Runtime-Library

关于optimization - 如何消除汇编程序可执行文件的膨胀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12520618/

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