以下是引用xiaomarn在2010-10-22 18:55:09的发言:
int main()
{
char a[]={186,169 ,1,187,1,0,180,64,185,12,0,205,33,180,1,205,33,180,76,205,33}; /*其实是代码,机器码*/
char s[]="hello world!";
asm call far ptr d@
return 0;
}
失败啊,还是加了一句汇编,不是纯C(主要是c还没到家,不!,没摸到边,不会用c跳到数据区去,努力ing....)loop
在电脑看来数据和代码是一样的,在我们看来的数据其实也是代码(在这里,我让计算机跳到我们定义的数组a让它执行了我的数组a),这一切只要看你要求电脑怎么做了。
ip指向什么,什么就是代码!
还有个小问题,就是关于数组a和s的定位(搜索了半天内存才找到),他们不是相对于段组DGROUP产生偏移吗?
怎么是426d(不是我预期的关于_data段首的21d--数组a的长度,C和纯汇编的区别?)?
而CALL却能很好的定位!
期待高手指教
被blueg..打击了,不过“不懂汇编是无法了解c的真谛”--忘了谁说的了
潜水学习去了。。。
编译出来 用IDA看看就行了