gpt4 book ai didi

c++ - 这些对齐功能之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:46 25 4
gpt4 key购买 nike

我正在编写一个自修改程序;已经开始工作了。我找到了这两个函数,但不确定它们到底做了什么,我喜欢适本地评论我的代码。

使用 getpagesize 获取页面大小

/*
* Defining variables:
* func - function in memory I'm using mprotect on
* offset - the offset in memory
* ptr - the pointer to the memory
*/

unsigned int offset = (unsigned int)( ((long)func) & (pagesize-1) );
unsigned char * ptr = (unsigned char *) ((long)func & (~(pagesize-1) ) );

我发现 offset 函数被用于内存对齐检查。我隐约知道他们做什么,但不知道有什么区别?

谢谢。

最佳答案

假设pagesize是页面的大小,他们使用位掩码来计算指向包含 ptr 的页面开头的指针 ( func ) , 以及该页内的偏移量 ( offset ),以字节为单位。

作为pagesize永远是二的幂,(pagesize-1)有所有的设置。页面内的偏移量是最后 12(例如)位(12 对应于页面大小为 4k=2^12),因此第一个语句使用 & 清除除最后 12 位之外的所有位。具有 12 个最低有效位的全 1 位掩码。

第二行通过清除最后4位来计算指向页面本身的指针;通过使用前一个位掩码的逻辑逆( ~ ),然后是 & ,它会清除所有其他位。

关于c++ - 这些对齐功能之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290618/

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