2016-12-02 11 views
0

Итак, я использовал CFF Explorer для добавления раздела кода в файл .exe. Я установил характеристики раздела 0x60000020 (исполняемый, читаемый, содержит код) и создал там фиктивный код с использованием IDA.Нарушение прав доступа на `jmp` до добавленного сегмента

Однако, когда я ввел jmp в этот код от исходного сегмента .text, все, что у меня было, было нарушением доступа. Я использовал IDA исправлять двоичный код, так что генерируется коррекций для меня, но это, похоже, прав:

jmp  far ptr 6:75D100h 

В результате опкод выглядит правильно тоже:

EA 00 D1 75 00 06 00 

Но как только я ударил, что jump - «Команда ссылается на память в 0xFFFFFFFF, память не может быть прочитана». Я немного экспериментировал с смещениями безрезультатно; Приложенный сегмент, кажется, правильно загружен в память.

Был бы признателен за любой намек на то, что мне не хватает здесь :)

+2

Что заставляет вас думать, что '6' - правильный селектор сегмента? – Jester

+1

@Jester как факт, это не так - похоже, что правильный - 5, но segfault сохраняется. Я понятия не имею, почему IDA ставит там 6, спасибо – Ap31

+2

'5' выглядит очень подозрительно. '7' может работать, если вы назначили новый дескриптор в LDT. – Jester

ответ

0

Просто, чтобы отметить это как ответили - решение, предложенное @Jester и @RossRidge, должен был упасть jmp far. Использование

jmp  near ptr 75D100h 

исправлено все. Должен сказать, что поведение МАР может быть несколько странным.