linux下实现运行程序的重定位~

linux下实现运行程序的重定位~,第1张

xserver 本身就支持远程运行,而且 X server 也支持远程登录而且根本不影响当前用户的环境。

这是服务器系统的根本功能。要不然一个计算机就一个显示器,N 个人登录只能排队?

貌似装个 VNC 就直接能实现。X server 我记得有两种远程图形界面显示,一种是服务器本地渲染后发送图像信息,但性能你肯定知道的。还一种就是本地不渲染,只运行,渲染在客户端进行,这样速度快,但似乎软件环境要求高一些。

这样是单独一个登录 session ,所有的程序都在这个会话里面,和别人的运行状况没关系。

具体怎么搞我就不知道了。没用过这个功能。

当编译器生成一个目标文件后,其并不知道代码和变量最终的存储位置,也不知道定义在其他文件中的外部符号。因此编译器会生成一个重定位表目,里面存储着关于每一个符号的信息。这个表目告知链接器在合并目标文件时应该如何修改每个目标文件中对符号的引用。这种重定位表目存储在.rel.text 段中和.rel.data 段中。该表目可以理解为一个结构体,其中存储着每一个符号的重定位信息。

offset表示该符号在存储的段中的偏移值。symbol 代表该符号的名称,字符串实际存储在.strtab 段中,这里存储的是该字符串首地址的下标。type表示重定位类型,链接器只关心两种类型,一种是与PC相关的重定位引用,另一种是绝对地址引用。PC相关的重定位引用表示将当前的PC值(这个值通常是下一条指令的存储位置)加上该符号的偏移值。绝对地址引用表示将当前指令中已经指定的地址引用直接作为跳转的地址,不需要进行任何修改。有了这些信息,链接器就可以将符号在存储段中的偏移值加上该段在重定位后该段的新地址,这样就得到了一个新的引用地址,而这个引用地址就是该符号的最终地址。同样,在程序所有引用该地址的部分都要作修改,使用这个新的绝对地址代替旧的偏移地址。当新的符号地址被修改完毕之后,链接器的工作就结束了。

不管是>>还是2>>都属于追加重定向。也就说,新重定向的内容不会覆盖掉原有文件里的内容,而是另起一行。只不过>>,是只对正确的内容或者结果进行重定向;而2>>,只对错误的内容或结果进行重定向。

比如原有文件a.txt,里面有一内容this is a test。现在我执行了命令:ls -l >>a.txt, 那么这个时候,因为的ls -l这个命令是正确的,所以ls -l 这个命令的结果将会被追加到a.txt中,以行为单位,写在了this is a test这段内容下面。

相反如果我执行了命令aaaa 2>>a.txt,那么因为这个命令是错的,所以会把我执行的aaaa命令之后所提示的错误提示(比如: command not found)追加到a.txt,同样是在this is a test这段话的下面。

而>和2>却是不追加,而是覆盖掉原有内容,其他意思一样。

1、&>test 这个书上说是将所有输出重定向至test,那么&指的是1、2还是所有的输出文件描述符还是别的什么作用?

2、echo "hi" >&2 这句话中的&又是什么意思?我知道这句话是将hi重定向至stderr,那么&又是起的什么作用?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8222123.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存