typedef struct { uint32_t old_function; uint32_t new_function; uint32_t count; vector<uint32_t> old_positions; vector<uint32_t> new_positions; } AddressMapping;

unordered_multimap<uint32_t, AddressMapping> normalFunctionAddressMap;

int32_t saveNormalFunctionAddress(uint32_t oldFunction, uint32_t newFunction, uint32_t oldPosition, uint32_t newPosition, bool countFlag) { auto range = normalFunctionAddressMap.equal_range(oldFunction);

for (auto iter = range.first; iter != range.second; iter++)
{
    if (iter->second.new_function == newFunction)
    {
        if (countFlag)
        {
            iter->second.count++;
        }
        
        iter->second.old_positions.push_back(oldPosition);
        iter->second.new_positions.push_back(newPosition);
        return 0;
    }
}

AddressMapping addressMapping;

if (countFlag)
{
    addressMapping.count++;
}
    
addressMapping.old_function = oldFunction;
addressMapping.new_function = newFunction;
addressMapping.old_positions.push_back(oldPosition);
addressMapping.new_positions.push_back(newPosition);
normalFunctionAddressMap.insert(std::make_pair(oldFunction, addressMapping));
return 1;
优化函数增强可读性和时间复杂度可以修改变量命名typedef struct uint32_t old_func; 这里包含基准地址 uint32_t new_func; uint32_t count; vectoruint32_t old_pos_v; 此处不包含基准地址 vectoruint32_t new_pos_v; 此

原文地址: http://www.cveoy.top/t/topic/iVk5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录