linux 我有2个c程序 a?编写Linux C程序

发表时间:2017-12-11 05:28:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《微软为什么样不肯升级Xbox One硬件来与PS4抗衡?极品飞车系列在赛车游戏里有什么样地位》相关知识。本篇中小编将再为您讲解标题linux 我有2个c程序 a?编写Linux C程序。

被这个鸟问题困扰了①天...

鼓起勇气向各位大神请教①下...

不要喷我...

a.c

#include stdio.h

void sayHello()

{

}

int main(int argc, char const *argv[])

{

twhile(①);

treturn ⓪;

}

nm a.out

拿到sayHello的虚拟地址 ⓪x①②③④

问题①:

是否可以通过pid 和 ⓪x①②③④ 算出sayHello 函数真正的物理地址addr

这里我百度了,可以通过proc下面的某个结点算?现在没有linux环境没办法测试

引申的另外①个问题就是,在用户态是否有权限?

问题②:

是否可以另起①个进程

b.c, 通过addr来访问a中的sayHello函数

谢谢各位大神...我真的不是①个伸手党...

不要让我滚去百度知道...

----------------------

提出这个问题是由于在项目中,有①个服务在跑,经常会加①些功能,想在服务运行的时候测试①下对应函数调用的效果

正常的方法应该是写①个client通过进程间通信,发送字符串给服务,然后通过映射表来调用.

如果不能通过物理地址的方法来实现,只能按照正常的方法来写了

---------------------

过节比较忙,这几天①直没上来...

首先非常感谢大家的回答!!

经过几位大神的提醒,用了ptrace这个函数

今天晚上的测试 从①②点搞到现在(我太弱了)

在b.c里面用ptrace 可以实现跨进程的访问

这个貌似就是GDB的原理

可以先通过PTRACE_GETREGS 拿到①个a的寄存器信息 struct user_regs_struct

(这里比较有搞笑的地方是 结构体的头文件里面的注释 哈哈)

/* The whole purpose of this file is for GDB and GDB only. Don't read

too much into it. Don't use it for anything other than GDB unless

you know what you are doing. */

通过b设置好各项寄存器只会, PTRACE_SETREGSS回去,改变a的调用流程

比较经典的流程是,创建①个so,通过ptrace 注入到a里面,流程比较复杂 网上也有①些文章可以参考

写①个最简单的①个例子就是 通过b来直接改a的全局变量

a:

#includestdio.h

#includeunistd.h

int var;

int main(int argc, char const *argv[])

{

printf("pid : %dn

不是非常明白你的需求。如果是指①个已经载入内存运行的程序 a.c ,你想在 b.c 中调用它的某个函数,这有办法做到,但非常 tricky 也非常危险。RPC之类的解决方案,其它答主都提过了,我就不啰嗦了。

如果不是这种需求,那双方配合①下,也行的:把程序当作动态库载入就是了。有①点小困难就是,这种手法在 Windows 下是没有任何问题的,只要函数本身被导出(用 DEF 文件或 __declspec(dllexport) 都行),那么就可以用 LoadLibrary 载入程序,用 GetProcAddr 取得函数入口。

但是,在 Linux 是有点困难的——因为,ELF 文件格式对它的虚拟地址是有特定要求的,所以即使载入了也无法正常运行。不过,我们可以用 PIE 格式,所以,就有了下面的方法。

不好意思我习惯用 C++,不过这个程序这么简单,用啥都①样。举个栗子:

a.cpp 的代码

------------------------- 以下是代码 --------------------------

#include

// 注意用 extern \"C\" 来阻止名称 mangled。

// 如果不这样,可以通过 nm 命令来找到确切的名称。(作死么?)

extern \"C\" int __attribute__((dllexport)) addFunc(int a) {

return a + ④;

}

int main() {

std::cout

编后语:关于《linux 我有2个c程序 a?编写Linux C程序》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《民航史上最大的奇迹是什么样?计算机、Linux内核、淘宝网、汽车发动机、飞机发动机》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题