- 主题:C语言是怎么处理反射需求的?
已经搞出来啦,用了十几年了。
我是在答,不是问。
【 在 gluon521 的大作中提到: 】
: 看来你这问题略复杂,估计光靠问是没法得到结果的。
: 你得找个做逆向有经验的人帮你搞,这样快一点。
: 或者自己慢慢去摸索,如果不着急的话。
: ...................
--
修改:ylh1969 FROM 221.221.51.*
FROM 221.221.51.*
嗯,多谢!我大致理解了。
还有个问题(结合我之前听说的一些java的皮毛),这个需求 是不是相当于通过网络传一个文件,然后别的机器拿到这个信息后,重新编译?
【 在 ylh1969 的大作中提到: 】
: 在网络间传递数据。结构数据基本没法传。一个原因是含有二进制信息,还有,不同系统和编译器,对相同的结构,布局并不相同,成员边界对齐方式不同。还有大小端的问题。那么,不同系统间互传信息,就需要序列化。JSON就是一种序列化方式、格式。
: 数据到达以后,还需要反序列化,把JSON转换回结构。那么,就需要另外一个函数:
: JSON_to_struct(void *struct_p,JSON json);
: ...................
--
FROM 14.16.218.*
重新反序列化到它的对象里,或直接使用json。
【 在 il15 的大作中提到: 】
: 嗯,多谢!我大致理解了。
: 还有个问题(结合我之前听说的一些java的皮毛),这个需求 是不是相当于通过网络传一个文件,然后别的机器拿到这个信息后,重新编译?
:
--
FROM 221.221.51.*
这里边最难的是位置,就是成员相对结构头的偏移量。
这个不能让你写,不同的编译器对齐规则不同。
在模板第一次被使用时,要自动算出来。
以后的使用就很简单了
p = struct_p + t->offset; //找到了变量的位置。效率很高,几乎与用成员名访问效率相同。
【 在 gluon521 的大作中提到: 】
: 看来你这问题略复杂,估计光靠问是没法得到结果的。
: 你得找个做逆向有经验的人帮你搞,这样快一点。
: 或者自己慢慢去摸索,如果不着急的话。
: ...................
--
修改:ylh1969 FROM 221.221.53.*
FROM 221.221.51.*
举个例子:
访问关系数据库时,一个表结构可以对应一个struct。
客户端需要下载部分数据表,在开发初期,并不能完全确定。
能否写一个服务,只要客户端提出要下载的表名,服务器就能够序列化并下载其内容,并反序列化到本地struct数组,作为本地数据库使用。
表名是运行时提供的,服务器对应的服务,在编译期是不知道会提出什么struct的。
或者反过来,客户端运行时需要上传一些struct给服务器,也是编译期不清楚,运行时才来的。
就算是同样的struct,在不同系统间,布局也可能是不同的,就需要序列化反序列化来处理。
【 在 flw 的大作中提到: 】
: 这么说也对。
: 但这并不是说反射就绝对不可行。
: 其它语言的许多概念在 C 里面都是可以模拟出来的。
: ...................
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
有这个需求,见楼上。
不用反射,你有啥高招?
【 在 siegfried415 的大作中提到: 】
: C语言作为一门严格的编译语言,其核心的逻辑是结构体的长度必须在编译期得到确定,所以根本不存在在动态语言的那种在运行期询问某个语言实体的类型那样的需求。。。
:
--
FROM 221.218.61.*
对,见44楼。
【 在 nikezhang 的大作中提到: 】
: 手撸内存模拟反射?
--
FROM 221.218.61.*