首页
学习
活动
专区
工具
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 获取指定进程输入命令行

92840
  • 自定义 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 为准。

    51830

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

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

    2.3K10

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

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

    6910

    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

    使用Apache commons-cli包进行命令行参数解析示例代码

    Apachecommons-cli包是专门用于解析命令行参数格式包。...、哪些参数有额外选项、每个参数描述等等,对应Options类 比如说一个命令行参数是 -hfbv,我们定义Options目的是,说明哪些参数是真正需要解析参数:如我们定义了Option:h...、f、b,那么在解析时候解析器就可以知道怎么去用定义Option匹配命令行从而获取每个参数。...3.解析完成返回CommandLine对象,由这个对象可获取此次命令行参数信息。 可以从这个对象中知道哪些参数输入了,哪些参数没有输入,哪些参数额外选项内容等等。...Apache commons-cli包进行命令行参数解析示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

    1.7K33

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

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

    2.1K31

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

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

    1.4K20

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

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

    1.8K50

    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 函数,如以下代码

    88520

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

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

    79230

    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.3K50
    领券