【发布时间】:2012-09-18 17:44:29
【问题描述】:
void print( char * str ){ printf("%s",str); }
void some_function(){
... Loads a file into `char * buffer` ...
... Stores the function print before `buffer` address ...
((void(*)(void))buffer();
}
在文件中,有一个“Hello World”,还有一些不可读的字符。执行缓冲区将打印“Hello World”。
我知道你可以像这样执行指针:
void (*foo)(int) = &bar; // such that void bar(int)
(*foo)(123);
但是将 void(int) 函数作为 void(void) 函数执行,其函数和参数在内存中对我来说是新的。
是否有一个函数在内存中的外观标准(如字符串以空字符终止),以便您可以以这种方式执行它?
【问题讨论】:
-
你为什么要做你想做的事?
-
将函数指针转换为不同的原型将产生“未定义的结果”。它可能会起作用,或者它可能会导致我们所知的宇宙终结。 (或者那是穿越溪流?)
-
函数在内存中的外观没有
standard。请阅读这篇文章:en.wikipedia.org/wiki/Assembly_language 它可能会让你更了解这些东西是如何组织的。 -
朋友的任务。我非常严格地按照他的指导员的书面指示将那条信息打印出来,否则它会打印出垃圾。他的下一个问题是:提示用户输入命令(cmd ...),将参数(由 null 分隔)加载到
char * getargs(int)可访问的内存中,将 getargs 存储到特定地址,然后执行 cmd。我坚持执行 cmd,我认为这个问题可能会有所帮助。我怀疑它会是system(input_string)。对于研究生水平的课程来说听起来太容易了,并且不能证明 getargs 的存在以及存储在内存中的所有内容
标签: c memory function-pointers