【问题标题】:Finding pointer to argv[0] so I can change it找到指向 argv[0] 的指针,以便我可以更改它
【发布时间】:2025-11-30 10:35:01
【问题描述】:

在 Solaris 上,我使用 getexecname 获得了指向 argv[0] 的指针,然后我可以在该位置使用 memcpy。 (每Finding current executable's path without /proc/self/exe

我想知道如何在 Linux 中获取指向 argv[0] 的指针,我在 /proc/self/exe 上做了 readlink,但它没有给我指向它的指针。

谢谢

【问题讨论】:

    标签: c linux pointers argv


    【解决方案1】:

    &argv[0] 为您提供指向argv[0] 的指针。

    您可以覆盖存储在argv[0] 指向的数组中的字符,只要您不超过现有的空终止符即可;但是它might cause UB 尝试修改指针argv[0]

    【讨论】:

    • 谢谢马特!但我无权访问 argv,我从 ctypes 运行代码。 :(
    【解决方案2】:

    对于readlink,请自带缓冲区。你分配一个缓冲区,传入一个指向它的指针,readlink 会将结果存储在那里:

    #include <unistd.h>
    #include <linux/limits.h>
    
    int main() {
      char buffer[PATH_MAX];
    
      int size = readlink("/proc/self/exe", buffer, sizeof(buffer));
      buffer[size] = '\0';
    
      // buffer is now the char* holding the filename
    
      printf("The executable is %s\n", buffer);
    }
    

    【讨论】:

    • 谢谢其他人!因此,在我执行 readlink 之后,我可以操作该缓冲区,这将对应用程序进行更改?
    • @Noitidart 不,/proc/self/exe 上的 readlink 是如果您想找到可执行文件的路径。缓冲区是你的,对其他任何东西都没有影响。如果您的问题是“如何更改正在运行的 Python 进程的可执行文件名称 top 显示”,请改为询问。
    • 感谢其他人现在就发帖。编辑:*.com/questions/29159130/…