Доброго времени суток. Я не нашел более подходящего раздела для этого топика. На реверс он не тянет, имхо. Задам тут, если что - прошу перенести в корректный раздел. Спасибо. Суть: Есть функция, которая заинлайнена. В этой функции есть мнемоника `cmp`. На двух ядрах, которые были под рукой, 3 и 4, она находится по смещению 18 байт от пролога. До нее в аккумулятор попадает значение из gs:0x1234. Определенная PER_CPU структуа, вернее указатель на ее начало. В обоих случаях сравнивается $rdi и конструкция вида [rax*чтототам + 0x0ff537]. Мне, кровь из носу, нужен этот оффсет. Я портировал в ядроу intel xed, то есть, могу юзать дизасм длинн, и в принципе пргументы тоже, по идее, могу достать. Загвоздка в том, что на разных ядрах будут незначительные отличия, в щависимости от компилятора, флагов и еще миллиона факторов. Вопрос: как бы этот процесс сделать автоматическим? Спасибо
Зависит от того, как процедура выглядит и что в ней меняется. sib-байт, которым закодировано [rax*index+base] не такая уж и частая конструкция, чтобы тупо пройдясь по коду от пролога и уперевшись в первое попадание в такую инструкцию не заявить с огромной долей вероятности, что она и есть искомая.
Ну, не совсем. В rax попадает значение из селектора $gs. Это, на линуксе, селектор PER_CPU памяти. Да и оффсет на структуру current_task у меня и так есть. Понял. А вот когда ftrace или kprobe инструментируют код 5ти байтовым нопом, в самом начале пролога, это не даст фолс-позитив? Попробую - отпишу