Как быть с таблицей переходов, встроенной в раздел .text в nasm?

В основном я использую IDA Pro для дизассемблирования некоторых двоичных файлов из SPEC2006 и внесения некоторых изменений, чтобы сделать их nasm-пересобранными в 32-битной Windows 7.

Я нахожу одну проблему в дизассемблированном ассемблерном коде, сгенерированном из IDA Pro, вот так:

            ;this is .text section
            .....
            LeadUpVec:
                dd offset LeadUp1
                dd offset LeadUp2
                dd offset LeadUp3
            LeadUp1:
            ;this is .text section

Очевидно, что IDA Pro поместила эту таблицу переходов внутрь кода.

Я использую nasm для сборки этого кода, и он генерирует это:

error: comma expected after operand 1  

в каждой из четырех строк

Я изменяю это так:

            ;this is .text section
            .....
            section .data         <--- I add it here
            LeadUpVec:
                dd offset LeadUp1
                dd offset LeadUp2
                dd offset LeadUp3
            section .text         <--- I add it here
            LeadUp1:
            ;this is .text section

Но он по-прежнему генерирует те же ошибки в каждой из четырех строк...

   error: comma expected after operand 1  

Может ли кто-нибудь помочь мне? Спасибо!


person lllllllllllll    schedule 16.02.2014    source источник
comment
Nasm не использует ключевое слово offset. Просто dd LeadUp1 и т. д. должны это сделать. Если у вас их много, вы можете %define offset (как ничего), чтобы Nasm проигнорировал их. Наличие таблицы переходов в section .text не должно быть проблемой. Память будет доступна только для чтения, но вы, вероятно, все равно не хотите, чтобы ваша таблица переходов была доступна для записи...   -  person Frank Kotler    schedule 16.02.2014
comment
@FrankKotler Да, вы правы! Спасибо Фрэнк :)   -  person lllllllllllll    schedule 16.02.2014
comment
@FrankKotler Если вы хотите ответить на этот вопрос ниже, я отмечу его как ответ, и это принесет пользу другим :)   -  person lllllllllllll    schedule 16.02.2014


Ответы (1)


Ладно, считай это "ответом".

Nasm не использует ключевое слово offset. Просто dd LeadUp1 и т. д. должны это сделать. Если у вас их много, вы можете определить смещение (как ничего), чтобы Nasm его проигнорировал. Наличие таблицы переходов в разделе .text не должно быть проблемой. Память будет доступна только для чтения, но вы, вероятно, все равно не хотите, чтобы ваша таблица переходов была доступна для записи...

person Frank Kotler    schedule 16.02.2014