我想写一个便携式内存搜索功能。签名看起来与此类似:
return_type FindPattern(uintptr_t start, size_t length, const unsigned char* pattern, const char* mask);
该函数从地址start
开始扫描当前进程内存,查找下一个length
字节,并返回与给定pattern
匹配的第一个字节序列的第一个字节的地址给定mask
。如果未找到模式,则函数应以某种方式指示此情况,可能通过特殊的返回值。主要担心的是在某些平台上空指针可能不等于0。
哪种返回类型最适合此任务以及如何指示是否找不到该模式?
答案 0 :(得分:1)
在C ++中,范围通常由一对迭代器表示:[begin, end)
并且习惯上find
,search
,mismatch
等将...返回end
表示没有匹配。
因此我建议只是跟随这些脚步,因为它会立即让你自己的函数对C ++用户来说很熟悉。
话虽如此,如果你坚持使用空指针,那么使用0
或nullptr
(C ++ 11及更高版本)是可移植的;文字0
被编译器翻译成适合目标平台的任何内容。
答案 1 :(得分:0)
首先,我假设你并不是指模式和面具有不同的类型。鉴于此,只返回该类型的指针,如果没有找到文字0
或者你有C ++ 11 nullptr
。即使系统的空指针不是全零位,也保证字面零为空指针。