OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2964|回复: 5

原子usmart工具,解析函数名、参数的程序,如何取得函数名?

[复制链接]

29

主题

338

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2018-4-13
在线时间
170 小时
发表于 2018-9-25 23:38:16 | 显示全部楼层 |阅读模式
5金钱
最近有空就看看usmart这个工具,对于接收到的字符串数据进行解析,分析出函数名和参数的代码不甚了了。
具体函数是usmart_get_fname(),可能原子希望工具适用于所有形式的函数,所以出现的一些我看不懂的代码,因为我个人对C也不是很了解,不能接触到常用类型之外的函数。
比如分析函数名的代码分析了可能会有'(' ')'嵌套的情况,我遇到的在函数名中有()的情况就是函数指针了,形如(*pFunc)()。
实在复杂,我想改写这个工具,让它只适用于通常的函数形式:
void func()
void* func()
type func(int a, ...)
type* func(int a,...)
type * func(int a, ...)
type *func(int a, ...)
参数也只有通常的形式,一层(),没有嵌套,太复杂的嵌套我觉得我还没有掌握,更别提写解析了。
当然,通常的参数形式还是要有的:
(void)
(type a,...)
(type* a,...)
(type * a,...)
(type *a,  ...)
(type a, "fooo", ...)  //常量1

(type a, 49, ...)  //常量2
对于函数指针作参数的形式暂时没想法。
(type a, (*pFun)(typeb,...), ...)
不知道我对usmart_get_fname函数的认识是不是出现的误差?



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-9-26 02:30:29 | 显示全部楼层
回复

使用道具 举报

29

主题

338

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2018-4-13
在线时间
170 小时
 楼主| 发表于 2018-9-26 09:57:35 | 显示全部楼层
正点原子 发表于 2018-9-26 02:30
你想适用哪类函数?

你好,我想适用的函数就是普通遇到的函数:函数名是规则名,没有()。参数也是普通参数。
我想得到你的指导,不知usmart工具对于函数匹配都适用于哪些函数?
usmart_get_fname()函数对于返回值、函数名的解析我注意到可以滤过空白字符,比如v oid,v字符后有空格,也可以被解析为void。这个可以容错但确实不是很有用,甚至说有违规则。
函数名解析对于()嵌套的情况我没有遇到过,除了函数指针可能有()外,还有带()的情形吗?
回复

使用道具 举报

29

主题

338

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2018-4-13
在线时间
170 小时
 楼主| 发表于 2018-9-26 15:45:58 | 显示全部楼层
本帖最后由 xiatianyun 于 2018-9-26 16:30 编辑

对于usmart_get_fname()函数,我先前意为分析()嵌套是分析函数名,原来是分析参数的。
而参数是有()嵌套情况的,除了函数指针外其实用的最多的是强制类型转换。
对于参数个数问题。
如果所需参数个数比输入的参数个数少就自动用前面的参数而滤过多余的参数,这点似乎在C语言中是不被认可的,有些恍惚了。

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-9-27 02:03:43 | 显示全部楼层
xiatianyun 发表于 2018-9-26 09:57
你好,我想适用的函数就是普通遇到的函数:函数名是规则名,没有()。参数也是普通参数。
我想得到你的指 ...

还是不太明白你的意思
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

29

主题

338

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2018-4-13
在线时间
170 小时
 楼主| 发表于 2018-9-28 09:49:48 | 显示全部楼层
基本上理解了usmart是如何实现的了。
说实话,如果要适用于C语言中的大多数函数形式的话还是需要很多C的知识的,只能做常用的基本函数形式的分析。
而且也只能分析出函数名,返回值,参数表,至于这些输入的值是否合法则完全无视,实在需要很高的技术手段,也不现实。
不过,usmart的程序写得似乎很马虎
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 05:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表