首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

读取另一个进程的命令行参数(Win32 C代码)

您好!您的问题是关于在Win32 C代码中读取另一个进程的命令行参数。以下是我的回答:

在Windows操作系统中,可以使用Windows API函数来获取另一个进程的命令行参数。具体来说,可以使用GetCommandLine函数来获取当前进程的命令行参数,使用OpenProcess函数打开另一个进程的句柄,然后使用ReadProcessMemory函数读取另一个进程的内存数据,从而获取其命令行参数。

以下是一个示例代码,演示如何使用Windows API函数获取另一个进程的命令行参数:

代码语言:c
复制
#include<windows.h>
#include<stdio.h>
#include <tchar.h>

int main(int argc, char* argv[]) {
    if (argc < 2) {
        printf("Usage: %s <PID>\n", argv[0]);
        return 1;
    }

    DWORD pid = atoi(argv[1]);
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
    if (hProcess == NULL) {
        printf("Failed to open process: %lu\n", GetLastError());
        return 1;
    }

    TCHAR commandLine[MAX_PATH];
    SIZE_T size = MAX_PATH;
    if (!ReadProcessMemory(hProcess, PEB_OFFSET(GetCurrentProcess(), Ldr.InMemoryOrderModuleList.Flink), commandLine, size, NULL)) {
        printf("Failed to read process memory: %lu\n", GetLastError());
        CloseHandle(hProcess);
        return 1;
    }

    printf("Command line: %s\n", commandLine);
    CloseHandle(hProcess);
    return 0;
}

在这个示例代码中,我们首先使用OpenProcess函数打开另一个进程的句柄,然后使用ReadProcessMemory函数读取另一个进程的内存数据,最后输出其命令行参数。

需要注意的是,这种方法可能会受到操作系统的安全限制,因此可能需要以管理员权限运行程序。此外,这种方法也可能会受到进程的保护机制,例如ASLR等,因此可能需要采取一些额外的措施来获取正确的内存地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet 获取进程命令行参数的工具

在 Windows 下,想要获取指定进程或所有进程的命令行参数,此时需要一些工具的辅助。...本文安利大家一个好用的 dotnet 工具,用于获取 Win32 进程的命令行参数 这是一个 dotnet 工具,因此安装特别方便,只需要在命令行输入下面代码就可以 dotnet tool install...-g dotnetCampus.Win32ProcessCommandViewer.Tool 安装完成,可以使用下面代码使用这个工具 pscv 这个命令不添加任何参数将输出本机所有进程,和进程的命令行参数...,有些有趣的进程拿不到就不输出 输出指定进程名的进程的命令行: pscv -n [Process Name] 输出指定进程 Id 的进程的命令行: pscv -i [Process Id] 这个工具完全开源...,请看 https://github.com/dotnet-campus/dotnetCampus.Win32ProcessCommandViewer 用到的技术请看 dotnet 获取指定进程的输入命令行

93440
  • 自定义 npm 包读取外部 npm install 时传入的命令行参数

    当我们自定义的 npm 包需要在测试阶段根据环境动态设置一些参数时就显得有些麻烦了。如果能在 npm install 时传递一些参数来提供内部 npm 包读取就会变的比较方便。...本文介绍如何通过 npm install 增加的命令行参数和 .npmrc 来动态配置自定义 npm 包的行为。...=https://download.com/file.zip 当我们在 npm install 后面增加了一个 --download-url 参数时,此参数会将参数和值设置到进程的环境变量中,logger.info...所以读取的时候要注意一下: if (process.env.npm_config_download_url) { // ... } 使用 .npmrc 配置文件 通过命令行配置是一种方式,但有时我们希望不需要敲繁琐的命令就一直让...需要注意的是,.npmrc 配置的优先级要高于命令行参数,所以如果你添加了 .npmrc 又在命令行使用了同样的参数列表,那么始终以 .npmrc 为准。

    58830

    由浅入深的了解进程(4)---优先级,命令行参数,环境变量

    竞争性: 系统进程数数目众多,而CPU资源只有少量,所有进程之间是具有竞争属性的,为了高效完成任务,更合理的竞争相关资源,便具有了优先级。 3、命令行参数 问题提出:main函数能够含参数?...如果后面加上别的东西的话数组就会变长,其余下标就是后面添加的字符。 我们在命令行中输入的命令行参数,本质上是命令行字符串。第一个表示的是程序的路径和名称,其余后面的叫做和该进程匹配的选项。...所以在放进数组的时候是分开存放的。并且这个字符串数组的最后一个元素存放的是NULL,如果想要证明的话也很简单,就报for循环的终止条件改为argv[i]即可,因为C语言中的NULL表示的就是0。...所以有命令行参数,本质是为了让程序能够有不同的选项,用来定制不同程序功能,所以才能够实现命令中会携带很多的选项。 谁干的?...这也就说明,命令行中启动的程序,都会变成进程,并且其实还都是bash的子进程。

    8110

    .NETC# 获取一个正在运行的进程的命令行参数

    在自己的进程内部,我们可以通过 Main 函数传入的参数,也可以通过 Environment.GetCommandLineArgs 来获取命令行参数。...但是,可以通过什么方式来获取另一个运行着的程序的命令行参数呢? ---- 进程内部获取传入参数的方法,可以参见我的另一篇博客:.NET 命令行参数包含应用程序路径吗?。....NET Framework / .NET Core 框架内部是不包含获取其他进程命令行参数的方法的,但是我们可以在任务管理器中看到,说明肯定存在这样的方法。 ?.../summary> public static class ProcessExtensions { /// /// 获取一个正在运行的进程的命令行参数...如果你需要将其转换为字符串数组,可以使用我在另一篇博客中使用的方法: .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args ---- 参考资料 Can I get command line

    2.4K10

    c++:改造cmdline用于MSVC下的命令行参数解析

    https://blog.csdn.net/10km/article/details/50982993 cmdline是一个轻量级的c++命令行参数解析工具,全部源码只有一个cmdline.h...你打开下面的cmdline项目托管地址只看首页上的说明就会使用了,另外,如果你看英文比较吃力,这篇博文有全面详细的中文翻译《cmdline —— 轻量级的C++命令行解析库》 cmdline项目托管地址...} 原因分析 C/C++语言在编译以后,函数和数据类型的名字会被编译器修改,改成编译器内部的名字,这个名字会在链接的时候用到。...上面这个demangle函数中调用的abi::__cxa_demangle的作用就是将编译器内部使用的名字反向转换(demangle)为源代码中定义的名字。...》 修改后的cmdline完整代码: 下面是修改后的cmdline完整代码,也可以从我的gitee仓库下载 https://gitee.com/l0km/common_source_cpp/blob

    2.3K20

    【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)

    ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带参数安装服务的,在此感谢猿友KOFIP的指教和代码...另外有关如何让一个exe即是服务又是桌面程序的问题,请参看园子里其它猿友的文章,或者有闲心我也会写一篇),这就需要安装该服务时,给映像文件路径带上参数,但InstallHelper不支持带参数,勉强带上参数的话...,当然要共用进程设置,后者则是存储每个服务的设置,自然要一一对应。...注:只支持安装自有进程服务,不支持共享进程服务。即只支持一个exe里只承载一个服务的情况,不支持多服务共享一个exe的情况。...这是由CreateService的dwServiceType参数指定的,Install已写死为SERVICE_WIN32_OWN_PROCESS常量,即自有进程类服务。

    1.4K20

    【Linux】Linux环境变量的理解 --- 命令行参数、shell子进程、环境变量、本地变量…

    无论是我们自己写的程序还是操作系统提前给我们准备好的程序,想要运行都必须先加载到内存里面,因为CPU只能从内存中读取代码和数据,但是这里有一个潜在的问题,这些程序想要运行,都必须让操作系统先找到这些程序...,被操作系统调用,参数实际上就是我们的命令行解释器bash也就是父进程传递的,我们只需要在命令行上写指令就可以了,shell在解释我们的指令时,就会给main函数传参了。...main函数中的第一个参数是命令行中运行程序的时候字符串的个数,以空格为分隔符,比如上面运行时-a -b -c等,实际上是三个字符串,....所以main函数中的第二个参数就是命令行参数表,表中的指针指向命令行中的所有字符串。...实际上在实现的代码中的main函数就是需要argc、argv这样的参数实现的 下面我们就通俗的实现一个不同选项拥有不同功能的进程。

    2.1K31

    【C文件操作1】如何写入读取?fopen的6种组合参数怎么用?

    C语言中文件操作,即文件打开,文件写入、文件读取、文件关闭等。 在使用这些功能时,需要了解其基本的使用规则,如: 文件读写前,必须先使用fopen函数打开文件。...使用fopen打开时,还要指明文件的打开的参数,是要读呢还是写呢?...这些参数如果不注意,比如直接使用"w"参数打开一个已存在的文件,则里面的内容会先被清空,如果还想要之前的文件中的内容,那也已经被清空了!...打开方式的参数 打开文件的参数,一共6种符号,包括2部分,第1部分的指定读还是写(r\w\a),第2部分指定是对第1部分的补充(t/b/+) 参数第1部分(r\w\a) 字符 含义 解释 r read...注意: 以2进制的形式写入,读取时也必须是以2进制形式读取!

    2K50

    Linux命令行一句代码配置C++的GDAL环境

    本文介绍在Linux系统的Ubuntu电脑中,在命令行中一句代码快速配置C++ 环境下的gdal库的方法。   ...库的配置并没有用Docker,而是直接用了命令行,且只需要1句代码来配置。...在命令行输入上述代码,随后回车即可执行代码。如下图所示,其中因为我这一次配置C++ 环境下gdal库的时候忘记截图了,所以就还是用本文开头提到的那篇文章里的图片。   随后,直接输入如下的代码。...sudo apt install libpq-dev gdal-bin libgdal-dev   其中,上述代码同样是在基于Debian的Linux发行版中使用的命令行指令,用于安装指定的软件包。...虽然我们需要的是gdal库,但是其需要很多其他辅助的库,所以就需要一起配置。同样的,执行上述代码,如下图所示。   到这里,就完成了C++ 环境下gdal库的配置。

    7100

    CreateProcess 创建带命令行参数的进程时,报错或者提示内存位置无效的可能的一个原因

    可能的一个原因:命令行参数使用了常量。...notepad",NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi); 解释: pszApplicationName和pszCommandLine分别表示进程使用的可执行文件名和向其传递的命令行字符串...这一点是非常重要的,因为如果你向CreateProcess传递的命令行字符串位于进程的只读存储区,就会发生Access Violation错误。...我们希望微软在未来版本的Windows中会改进CreateProcess,使其接受常量字符串作为命令行参数,并在其内部分配/释放临时缓冲区而不是让API调用者来做。...你如果想要一个动态长度命令行参数,可以参考下面的代码 STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; LPTSTR pszCmd

    2.4K50

    Win32 使用 CreateProcess 方法让任务管理器里的命令行不显示应用文件路径

    本文记录一个 Win32 的有趣行为,调用 CreateProcess 方法传入特别的参数,可以让任务管理器里的命令行不显示应用文件路径 开始之前,先看看下面这张有趣的图片 可以看到我编写的 SvcawgewawkuHenaynairbelhurno.exe...应用在任务管理器的命令行里面显示的参数居然是 C:\Windows\notepad.exe 而不是具体的 SvcawgewawkuHenaynairbelhurno 应用 C:\lindexi\Code...这是使用了 CreateProcess 方法的一个过时用法,那就是在此方法的 lpApplicationName 参数里面传入将要启动的进程路径,在第二个参数 lpCommandLine 里面传入的是...参数,就是以上代码的 lpApplicationName 参数,只是参数命名有所不同而已 如果咱偏偏就要用这个 lpApplicationName 参数呢,就可以玩出一些无文档的锅,例如让任务管理器里面的命令行行为奇怪起来...; 接下来创建一个有趣的命令行参数,例如就是记事本的路径 var arguments = "\"C:\\windows\\notepad.exe\""; 接着调用 CreateProcess 函数,如以下代码

    89720

    WPF 基于 WER 注册应用崩溃无响应回调和重启方法

    换句话说,可以有时机弹出提示,也就是相当于可以做很多保存信息的逻辑,或者说上报的动作,或者制作 DUMP 文件同时上传等 如果用户选择重启的话,还可以在重启的时候将命令行参数发送到重启的应用里面,这样就可以实现在重启的应用里面继续上一个应用的逻辑...MessageBox.Show("应用程序炸掉"); } } 在启动的时候判断是否有命令行,有的话,就显示命令行的内容。...如果是期望记录 DUMP 文件,可以尝试通过跨进程调用的方法,调用另一个进程辅助记录 本文核心是通过 ARR 的辅助方法,这几个 API 都是 Win32 的方法,可以使用如下代码进行引用 public...summary> /// 向WER注册应用程序重启机制 /// /// 重启命令行参数...,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init git remote add origin https://gitee.com

    80630
    领券