首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nasm/yasm参数,链接到C++

nasm/yasm参数,链接到C++
EN

Stack Overflow用户
提问于 2010-03-20 04:15:07
回答 2查看 1.2K关注 0票数 4

我有一个关于nasm和它与C++的链接的问题。我将一个小测试函数声明为

extern "C" void __cdecl myTest( byte i1, byte i2, int stride, int *width );

我这样称呼它:

代码语言:javascript
复制
byte i1 = 1, i2 = 2;
int stride = 3, width = 4;
myTest( i1, i2, stride, &width );

该方法仅用于调试程序集,并查看如何使用堆栈指针来获取参数。除此之外,应将指针参数的值设置为7,以确定其工作原理。这是这样实现的:

代码语言:javascript
复制
    global _myTest

_myTest:
    mov     eax, [esp+4]     ; 1
    mov     ebx, [esp+8]     ; 2
    mov     ecx, dword [esp+16]    ; width
    mov     edx, dword [esp+12]    ; stride

    mov eax, dword [esp+16]
    mov dword [eax], 7

    ret

并通过以下方式编译

代码语言:javascript
复制
yasm -f win32 -g cv8 -m x86 -o "$(IntDir)\$(InputName).obj" "$(InputPath)"

,然后链接到c++应用程序。在调试模式下,一切工作正常。该函数被调用几次,并按预期工作,而在发布模式下,该函数工作一次,但后续的编程操作失败。在我看来,堆栈/框架指针出现了一些问题,无论是近/远,但我对这个主题还很陌生,需要一点帮助。提前感谢!一个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-20 05:06:00

嗯,似乎我必须通过推送/弹出来保存ebx

票数 1
EN

Stack Overflow用户

发布于 2010-03-20 05:46:19

这可能是有帮助的:FLAC使用了汇编程序中的一些源代码,这些源代码是由nasm编译的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2480322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档