gcc 在c代码中内嵌汇编调用c函数: 只是证明曾经我来过
我怕我不写下来,将来我都不记得我还在 c 中嵌套过汇编语言,用汇编代码调用一个c函数的过程。
折腾了一下午,在网上查看相关的资料,然后照葫芦画瓢地在c代码中嵌套汇编,希望解决我所遇到的问题,可最后发现全是徒劳。
根据我的初步了解,在c中嵌套汇编来调用一个c函数的时候, 当c函数的参数过多时, 汇编代码没办法写, 好像对参数的数量有相当大的限制。
下面的代码,如果我将c函数的参数增加到3个时, 汇编代码我就写不出来了, 并不能通过简单的在汇编代码中增加一个参数来实现。
多增加一个参数,编译代码时,就会抛出错误:'asm' operand has impossible constraints| ('asm'操作数有不可能的约束)
我是彻底的放弃了,到此为止吧。
int abc2(int a, int b)
{
printf("\n"); printf("参数a(%d): %d\n", &a, a);
printf("参数b(%d): %d\n", &b, b);
//printf("参数c(%d): %d\n", &c, c);
//printf("参数d(%d): %d\n", &d, d); return a > b ? a : b;
} int main(int argc, char *argv[])
{
void *saved_my_esp, *target_addr;
unsigned int return_eax, return_edx; void *func = abc2; int a = ;
int b = ;
int c = ;
int d = ; printf("&a:%d\n", &a);
printf("&b:%d\n", &b);
printf("&func:%d\n", func); //参考: https://bbs.csdn.net/topics/360148698 __asm__ __volatile__ ( "movl %%esp, %0;" "movl %3, %%eax;" //变量: d
"push %%eax;" "movl %4, %%eax;" //变量: c
"push %%eax;" "movl %5, %%eax;" //函数
"call *%%eax;" "mov %%eax, %1;"
"mov %%edx, %2;"
"movl %0, %%eax;" //"movl %%eax, %%esp;" /** 加这一句, 就出错 **/ : "+m" (saved_my_esp), "=m" (return_eax), "=m" (return_edx) : "r"(b), "r"(a), "r"(func) // 关于 m, r 说明: https://www.cnblogs.com/Jezze/archive/2011/12/23/2299838.html : "%eax", "%edx", "%esp"
); printf("saved_my_esp:%d\n", saved_my_esp);
printf("return_eax:%d\n", return_eax);
printf("return_edx:%d\n", return_edx); printf("\n"); //printf("return_value:'%s'\n", return_eax
//printf("return_value:%d\n", *(int *)return_eax);
//printf("return_value:%lf\n", *(float *)return_eax);
//printf("return_value:%d\n", *(BYTE *)return_eax); printf("return_value:%d\n", return_eax); printf("\n"); printf("------------------end-------------\n"); return ; }
gcc 在c代码中内嵌汇编调用c函数: 只是证明曾经我来过的更多相关文章
- GCC在C语言中内嵌汇编 asm __volatile__ 【转】
转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达 ...
- GCC在C语言中内嵌汇编 asm __volatile__
2012-11-26 22:20 17958人阅读 评论(2) 收藏 举报 分类: linux(59) 架构管理(24) C/C++(59) 目录(?)[+] 在内嵌汇编中,可以将C语言表达式 ...
- Linux内核--C语言中内嵌汇编 asm __volatile__
在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可 ...
- Linux内核系列—C语言中内嵌汇编 asm __volatile__,asm__volatile_【转】
转自:http://www.bkjia.com/Androidjc/1109412.html 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器, ...
- vs2010 c++中内嵌汇编代码
在研究汇编时,需要自己写点汇编代码测试,用Ollydbg写每次加载程序就没了,不是很方便. 可以考虑直接在程序中写入汇编代码,只需要加上关键字“_asm”宏(C++代码中). 如下示例 编写环境 :v ...
- IAR EWAR 内联汇编 调用外部函数 Error[Og005], Error[Og006]
How do I call a C function in another module from inline assembler in IAR EWARM? I have a bit of ass ...
- ARM GCC 内嵌汇编手册
转自:http://blogold.chinaunix.net/u2/69404/showart_1922655.html ARM GCC 内嵌(inline)汇编手册 关于这篇文档这篇文章是本人为方 ...
- gcc内嵌汇编详解
[作者:byeyear 首发:cnblogs Email:east3@163.com 转载请注明] 有时候我们希望在C/C++代码中使用嵌入式汇编,因为C中没有对应的函数或语法可用. ...
- GCC嵌入式汇编(内嵌汇编)入门
GCC嵌入式汇编(内嵌汇编)入门 1. 入门 在C中嵌入汇编的最大问题是如何将C语言变量与指令操作数相关联.当然,gcc都帮我们想好了.下面是是一个简单例子. asm("fsinx %1, ...
随机推荐
- excel中统计列中的值在其他列出现的次数多个条件
excel中统计列中的值在其他列出现的次数多个条件 =COUNTIFS(E2:E373,"=VIP经销商",J2:J373,K2) 解释 E列的第二行到第373行中值 等于 VIP ...
- python爬虫—爬取英文名以及正则表达式的介绍
python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一. 爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...
- 在<a></a>标签中如何调用javaScript脚本
在日常工作总会遇到在<a>标签中执行js代码的情况 现在做一个总结,希望对大家有一个帮助. 1.a href="javascript:js_method();" 这是我 ...
- C# vb .NET读取识别条形码线性条码UPC-E
UPC-E是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的 ...
- 【JZOJ】1341. water(水流)
题目大意 你必须买一些泵把水抽走.泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,小镇可以认为是N * M的矩阵.矩阵里的每个单元格都是一个‘a’- ‘z’小写字母,该小写字母表示该格子的高 ...
- 解决IIS Web部署 svg/woff/woff2字体找不到问题(vue部署后找不到)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/smartsmile2012/articl ...
- 如何设计提高服务API的安全性(一)基础介绍
场景 现今越来越多公司提供了Sass平台服务,大部分也直接提供API.如快递鸟.微信Api.云服务.如何保证这些服务的安全性是一门重要的课题.如快递跟踪.机票查询等很便捷地影响着我们d的生活,对这些技 ...
- FPM十一:点击POPUP显示明细
沿接着前面的Search和List.在LIST中点击一列,弹出窗口显示明细. 1.list中定义事件: METHOD if_fpm_guibb_list~get_definition. DATA:gt ...
- Java中的equals与==
package demo; public class Test { public static void main(String[] args) { String str1 = new String( ...
- nginx访问jupyter
现在jupyter已通过k8s安装完成,并通过nodeport暴露出来. 如果不能直接访问这个nodeport(像我在的公司)或是希望能组织好jupyter实例, 那应该如何调通呢? 这里包括两个技术 ...