Я использую NASM для некоторых проектов в Windows. Я хотел бы назвать функцию printf
C, но я не хочу, чтобы GCC со всем этим был burocracy, в результате мой небольшой проект (сборка на самом деле 30 строк) в разобранном 24000 строк. Как я могу сделать ссылку (получить функцию, которая будет вызвана в определениях системы, например MessageBox) без компоновщика?Как связать функции сборки без компоновщика?
Редактировать: Я сделал это с помощью дизассемблера. Смешно видеть, что почти все добавляет и nop.
0000000000402b90 <MessageBoxA>:
402b90: ff 25 2a 58 00 00 jmpq *0x582a(%rip) # 4083c0 <__imp_MessageBoxA>
402b96: 90 nop
402b97: 90 nop
402b98: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
402b9f: 00
и __imp_MessageBoxA
:
00000000004083c0 <__imp_MessageBoxA>:
4083c0: 14 87 adc $0x87,%al
4083c2: 00 00 add %al,(%rax)
4083c4: 00 00 add %al,(%rax)
Что это на самом деле?
Получите меньший компоновщик? ;) – Jester
@ Jester, это так глупо, я буквально рассмеялся: P Знаешь, я говорю о исполняемом коде, а не о компоновщике. –
NASM может генерировать файлы .obj, которые могут быть связаны с инструментами сборки MS. Но мне вряд ли кажется, что компоновщик GCC не может делать то, что вы хотите, - если вы не используете Cygwin? (Если это так, попробуйте MinGW вместо этого.) –