我开始使用 Gradle 并且刚刚构建了一些东西。构建生成了文件“options.txt”:
-x
c++
-c
-I
/path/to/project/src/main/headers
-I
/path/to/project/src/hello/headers
-m64
Run Code Online (Sandbox Code Playgroud)
他们为我选择编译器选项很酷,但例如我想用 -std=c++17 和 -Wall 和 -Wextra 编译我的东西。那么如何将这些标志添加到 g++ 选项中呢?
在运行时,汇编程序或机器代码(它是什么?)应该在RAM中的某个位置.我可以以某种方式访问它,读取甚至写入它吗?
这仅用于教育目的.
所以,我只能编译这段代码.我真的在这里读书吗?
#include <stdio.h>
#include <sys/mman.h>
int main() {
void *p = (void *)main;
mprotect(p, 4098, PROT_READ | PROT_WRITE | PROT_EXEC);
printf("Main: %p\n Content: %i", p, *(int *)(p+2));
unsigned int size = 16;
for (unsigned int i = 0; i < size; ++i) {
printf("%i ", *((int *)(p+i)) );
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我补充一下
*(int*)p =4;
Run Code Online (Sandbox Code Playgroud)
那是一个分段错误.
从答案中,我可以构造以下代码,在运行时修改它自己:
#include <stdio.h>
#include <sys/mman.h>
#include <errno.h>
#include <string.h>
#include <stdint.h>
void * alignptr(void * ptr, uintptr_t alignment) {
return (void *)((uintptr_t)ptr & ~(alignment …Run Code Online (Sandbox Code Playgroud)