汇编调用C库函数

RADASM调用C库函数

 

1.先包含(由于radasm的爱好者做好了inclib文件) :
include msvcrt.inc
includelib msvcrt.lib
2.调用C库函数和调用api一样,但名字和C语言函数的名字有一点点不一样,如调用比较函数:
Invoke crt__strcmpi, offset sz1, offset sz2
开头通常要加上crt__crt_(可以自己到msvcrt.inc中去看声明)
在32位汇编语言中,调用库函数通常涉及以下步骤: 1. **函数地址获取**:首先,你需要知道库函数的地址。这通常可以通过链接器提供的符号表(如`.dll`或`.so`文件的导入表)获得,或者在编译时使用`extern`关键字从头文件中导出。 2. **堆栈设置**:调用函数之前,必须设置好栈帧。这包括保存当前现场(局部变量和可能的返回地址)以便函数执行完毕后能够恢复。`push`指令常用于将局部变量压入堆栈,而`push ebp`则用来保存基指针`ebp`(在x86架构上)。 3. **调用指令**:在Windows平台上,使用`call`指令(如`call _function_name`)来跳转到目标函数的地址。在Linux或其他使用栈模式的系统中,通常使用`jmp`指令加上函数地址(`jmp _function_name`),或者通过`sub esp, n`(减去栈调整量`n`)和`ret`(返回)来间接调用。 4. **参数传递**:库函数的参数可以按照规定的方式传递,比如直接在栈上,或者通过寄存器。对于结构体或复杂类型,可能需要先复制到栈上。对于值类型参数,一般由调用者自动处理;引用类型或指针则可能需要显式移动。 5. **函数返回**:函数执行完毕后,通过`ret`指令返回到调用者的位置。这将恢复堆栈,如果函数有返回值,还需要从堆栈弹出返回值。 6. **清理工作**:在函数调用结束后,确保完成任何必要的清理操作,并关闭资源,如文件、内存等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值