小编D. *_*sin的帖子

Gradle with C++:如何更改编译器选项?

我开始使用 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++ 选项中呢?

c++ gradle build.gradle

1
推荐指数
1
解决办法
1322
查看次数

C:如何在运行时在我的程序中更改自己的程序?

在运行时,汇编程序或机器代码(它是什么?)应该在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)

c self-modifying self-reference

-2
推荐指数
1
解决办法
246
查看次数

标签 统计

build.gradle ×1

c ×1

c++ ×1

gradle ×1

self-modifying ×1

self-reference ×1