程序在运行中修改自己?

「已注销」 2005-05-18 10:36:41
1. d:\test.exe 运行后如何通过文件名“d:\test.exe”修改硬盘中的程序。
2. 如何取得计算机的域名。api函数
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjp6688 2005-05-19
  • 打赏
  • 举报
回复
int gethostname (

char FAR * name,
int namelen
);
xjp6688 2005-05-19
  • 打赏
  • 举报
回复
学习
MagicCarmack 2005-05-19
  • 打赏
  • 举报
回复
上面的牛人

学习。。。。。。。。。。。。。。。
herryhuang 2005-05-18
  • 打赏
  • 举报
回复
1.

在windows上无法实现,因为windows将可执行文件在硬盘中的位置映射到虚拟内存中,所以任何一个正在运行中的文件都不能被:删除、更改、更名,它的任意一级父目录也不能做这样的操作。但是可以设置在下次启动时自动删除此文件。(所以我们有时候才会看到:要想完全删除这个软件,请重新启动计算机。。。)。在UNIX/Linux下面就简单了,只要有文件的操作权限,使用unlink系统调用即可,这个调用并不是将文件删除,而是将文件索引删除,如果一个文件的所有索引都被删除了,而这个文件并没有被打开,她会被立即删除,但是因为此时你的这个可执行文件被“内核”打开了,并正在执行,所以会等到内核关闭此文件时,也就是程序运行结束后,会将此文件删除。为了验证这一点,你可以编写如下的程序:

程序运行
使用unlink将自己的索引删除
暂停
用另一个用户登录,察看磁盘空间
程序继续运行并结束
再次察看磁盘空间,发现空闲的空间增加了。


2.

int gethostname(char* name, int namelen);


这个函数在windows和linux上都能使用,第一个参数指向一个已经分配好空间的字符串,第二个参数是这个空间的大小,如果执行成功,返回0,此时主机名就放在字符串中了,如果出错,会返回一个出错码,可以使用perror察看这个出错码的含义。

flying_dancing 2005-05-18
  • 打赏
  • 举报
回复
搜索一下就可以了....
-_-
声明我不会
nicknide 2005-05-18
  • 打赏
  • 举报
回复
还以为你需要修改内存映像,那个简单。如果是修改文件系统中的文件。
建议可以在FAQ搜索看看,以前见过类似的主题,据说涉及到ring 0权限的问题。
然后更改内核中文件访问的一个地方...

域名?不清楚了

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧