我正在阅读本文,他们使用以下示例来解释未定义的行为:
// PROGRAM 1
#include <stdio.h>
int f1() { printf ("Geeks"); return 1;}
int f2() { printf ("forGeeks"); return 1;}
int main()
{
int p = f1() + f2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,它似乎是关于子表达式的评估顺序,并且根据C标准(附件J.1),它是一个未指定的行为,而不是未定义的行为:
未指定的行为:评估子表达式的顺序以及副作用发生的顺序,除非为function-call(),&&,||指定.,?:和逗号运算符(6.5)
由于我对阅读官方规范非常陌生,我想知道我是否误解了这个例子或文档.我知道这看起来很迂腐,但我有兴趣以正确的方式学习这些高级主题.
我正在尝试使用CreateRemoteThread()函数来注入一个函数injectFunction()ans使其在远程进程内运行.
但是,似乎这段代码无法正常工作.一旦注入器程序运行CreateRemoteThread()函数,目标程序就会崩溃.什么出错了指针?
void injectedFunction()
{
MessageBoxA(NULL, "Injection OK", "Injection OK", NULL);
}
void injectionFunction()
{
HANDLE hTargetProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid);
CreateRemoteThread(hTargetProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)injectedFunction, NULL, NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud)