便携式内存搜索功能的返回类型

时间:2014-11-04 14:32:37

标签: c++ pointers portability

我想写一个便携式内存搜索功能。签名看起来与此类似:

return_type FindPattern(uintptr_t start, size_t length, const unsigned char* pattern, const char* mask);

该函数从地址start开始扫描当前进程内存,查找下一个length字节,并返回与给定pattern匹配的第一个字节序列的第一个字节的地址给定mask。如果未找到模式,则函数应以某种方式指示此情况,可能通过特殊的返回值。主要担心的是在某些平台上空指针可能不等于0。

哪种返回类型最适合此任务以及如何指示是否找不到该模式?

2 个答案:

答案 0 :(得分:1)

在C ++中,范围通常由一对迭代器表示:[begin, end)并且习惯上findsearchmismatch等将...返回end表示没有匹配。

因此我建议只是跟随这些脚步,因为它会立即让你自己的函数对C ++用户来说很熟悉。

话虽如此,如果你坚持使用空指针,那么使用0nullptr(C ++ 11及更高版本)是可移植的;文字0被编译器翻译成适合目标平台的任何内容。

答案 1 :(得分:0)

首先,我假设你并不是指模式和面具有不同的类型。鉴于此,只返回该类型的指针,如果没有找到文字0或者你有C ++ 11 nullptr。即使系统的空指针不是全零位,也保证字面零为空指针