QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 699|回复: 2

C与汇编的混合编程?

[复制链接]
发表于 2005-2-21 15:14:08 | 显示全部楼层 |阅读模式
不知道需要什么头文件,格式怎样?
那位大虾给个例子啊?
我想取得当前应用程序的DS,ES的数据

int main(void)
{
  
  unsigned long ds_value;

  --asm {
     movl %eds, ds_Value
  }

  return 0;
}
好像不对啊。
发表于 2005-2-21 16:08:39 | 显示全部楼层
一般的写法
__asm__ __volatile__("汇编指令":输出变量 :输入变量 :被保护的寄存器);

很复杂,不是一两句话能说清楚的(我只知道个大概)。



你取出段寄存器的值没有任何意义,那只是个表的索引,那个表里才存着
真正的段起始地址,长度,访问权限。而那个表是在内核的内存空间里,被
硬件保护着。

但是,就算你取到了那个表的内容也没用,所有段的起始地址,长度都是
0和4GB,那只是linux为了糊弄CPU的段式寻址而设的值。
回复

使用道具 举报

 楼主| 发表于 2005-2-21 16:28:37 | 显示全部楼层
对process stack使用HugeTLB的large page 我就是通过copy整个process stack的内容,然后修改BP,SP指针搞定的。
目前我只是初步想法,想看看,这些DS,ES中的指针指向哪里?和ELF文件中.data有什么关系
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 16:44 , Processed in 0.049178 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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