小编Ива*_*ван的帖子

Android上的原生自修改代码

我试图在Android上制作一些自我修改的本机代码并在模拟器中运行它.我的示例基于android-ndk中的HelloJNI示例.它看起来像这样:

#define NOPE_LENGTH 4

typedef void (*FUNC) (void);

// 00000be4 <nope>:
//     be4: 46c0        nop         (mov r8, r8)
//     be6: 4770        bx  lr
void nope(void) {
    __asm__ __volatile__ ("nop");
}

void execute(void){
    void *code = mmap(NULL, NOPE_LENGTH, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);

    if (code != MAP_FAILED) {
        memcpy(code, nope, NOPE_LENGTH);

        ((FUNC)code)();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是这段代码崩溃了.怎么了?

linux android arm self-modifying android-ndk

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

是否有可能在没有pthread的情况下构建protobuf?

需要在没有pthread的实时操作系统上使用Protocol Buffers.我可以通过这种方式静态链接protobuf

g++ -g -Wall example.pb.cc example.cc -o example -static -lprotobuf -lpthread
Run Code Online (Sandbox Code Playgroud)

但是如果没有pthread,我会收到链接错误.是否可以配置protobuf在没有pthread的情况下工作?

c++ pthreads protocol-buffers

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