gpt4 book ai didi

visual-c++ - 用cl.exe编译asm文件到dll

转载 作者:行者123 更新时间:2023-12-04 06:47:14 38 4
gpt4 key购买 nike

给定:prog.c 有一个入口点 prog

我经常这样做

cl.exe /MD /LD /Fe"prog.dll" /Fo"prog" "prog.c" /link ext.lib

cl.exe /MD /Fo"prog.obj"
cl.exe /MD /LD /Fe"prog.dll" "prog.obj" /link ext.lib

在这两种情况下,生成的 prog.dll 都可以正常工作。

现在我执行了以下操作来获取 asm 文件而不是 obj 文件:

cl.exe /c /MD /Fa"prog"

到目前为止,这也“有效”。但是我不知道如何制作这个文件的 dll。

尝试过:

ml.exe /c /Cx /coff prog.asm
cl.exe /MD /LD /Fe"prog.dll" "prog.obj" /link ext.lib

结果:没有入口点的 prog.dll prog

再次尝试:

ml.exe /c /Cx /coff prog.asm
cl.exe /MD /LD /Fe"prog.dll" "prog.obj" /link /entry:prog ext.lib

结果:编译器警告错误入口点 _prog 不是带有 12 字节参数的 stdcall 和关于未解析符号 _memcpy 的编译器错误。

问题:有什么方法可以将 cl.exe 由/Fa 生成的 asm 文件编译为 dll(最好通过 cl.exe,如果不能通过 ml.exe)?

最佳答案

Is there any way to compile the asm file which cl.exe generates by /Fa to a dll (preferably via cl.exe, if not possible with ml.exe)?

否:

  1. C/C++ 编译器 (cl.exe) 无法汇编汇编代码输入。它只需要 C 或 C++ 源代码作为输入。汇编程序是 MASM (ml.exe)。
  2. cl.exe 的汇编代码输出一般不能直接输入 MASM。在某些情况下,它甚至不是有效的汇编代码。在其他情况下,MASM 不直接支持的代码中有指令、关键字和其他内容。如果 C/C++ 源代码使用异常,事情就会变得特别棘手。列表文件仅供引用之用。

我不清楚您一开始为什么要这样做。如果您的源代码是 C 或 C++,并且可以通过 MSVC 编译和链接,那么引入将它与汇编语言相互转换的额外中间步骤有什么意义呢?直接用cl.exe做一个DLL就可以了。

如果您绝对必须这样做,您将必须使用 MSVC 生成的 ASM 列表文件并在通过 MASM 运行它之前手动清理它。您可以通过关闭整个程序优化、关闭异常处理、关闭安全检查/cookie 并向链接器指示图像包含安全 SEH 处理程序来简化此清理任务。请注意,其中一些可能会破坏或更改代码的行为!您还需要为从运行时库调用的函数添加 EXTERN 定义。

关于visual-c++ - 用cl.exe编译asm文件到dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007063/

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