gpt4 book ai didi

c++ - Mac 64 位系统调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:41 25 4
gpt4 key购买 nike

如何使用 C++ 在 Mac 上执行 64 位 系统调用

我需要以下内容才能工作:

#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>

int main() {
long* addr = (long*) syscall(SYS_mmap, 0, 100, 1 | 2, 2 | 4096, -1, 0);
}

问题是下面的 addr 应该是 64 位的,因为它是一个指针,但它会将结果截断为 32 位值。

我编译:

g++ ./mmap.cc -o ./mmap 

附言我知道存在 mmap 函数,上面只是一个例子,我需要让 syscall 函数工作。

附言问题是在 64 位系统上 syscall 应该返回 64 位值,但在 Mac unistd.h 中它被定义为 int:

int  syscall(int, ...);

这是一个错误吗? mmap 系统调用正确返回 void*:

void *  mmap(void *, size_t, int, int, int, off_t) __DARWIN_ALIAS(mmap);

mmap实际上是如何实现的?

P.P.P.S.

在 Linux 上它被正确定义为:

long syscall(long number, ...);

最佳答案

经过一番搜索,我没有找到在 Mac 上执行 64 位系统调用的方法。

所以,我自己实现了这些,你 can find the functions here .

此外,如果您使用这些函数,请不要忘记将 0x2000000 Unix 系统调用类转移添加到您的系统调用编号中:

int SYS_write = 4;
int STDOUT = 1;
char* str = "Hello world\n";

syscall3(0x2000000 + SYS_write, STDOUT, str, 12);

关于c++ - Mac 64 位系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com