Для инструмента анализа программ мне нужно определить все типы операций MOV (регистр-> регистр, память-> регистр, регистр-> память). Я был в состоянии идентифицировать Memory-> Register, но потерпел неудачу для других.
Другая проблема — косвенные операнды памяти. Мне нужно как-то их идентифицировать. Я понимаю, что PIN-код может проверить, есть ли у нас чтение памяти / запись в память. Но косвенный доступ к памяти, например, MOV eax [ebx], не так ли? Как я могу справиться с ними? Мне нужно содержание ebx в этом примере.
ура
Используйте INS_OperandMemoryBaseReg и т. Д. Я надеюсь, что вы знакомы со сложным способом обращения к операндам памяти в x86. Если нет, сначала прочитайте руководства Intel или для краткого обзора http://www.supernovah.com/Tutorials/Assembly3.php. Вы можете получить другие части чего-то вроде [eax + ebx * 2 + 25] с INS_OperandMemoryIndexReg, INS_OperandMemoryScale, INS_OperandMemoryDisplacement и т. Д.
Код в movRMHandler () из http://devilheart.googlecode.com/svn-history/r80/trunk/devilheart/project_pin/devilheart/ins_handler.cpp должен начать вас.