Всем привет,у меня возникла такая проблема,не удается прилинковать библиотеку kernel32.lib,ну не то что бы не удается,просто полученная прога вылетает с ошибкой,объясню более конкретно,имеется у меня вот такой код: Код (ASM): EXTERN __imp_ExitProcess:proc public entry .data txt db "HELLA WORLD",0 .code entry: mov rcx,0 call __imp_ExitProcess end компилирую его ml64.exe из пакета DDK Код (Text): ml64.exe vetv.asm ,а линкую я его вот так Код (Text): link vetv.obj /DEFAULTLIB:kernel32.lib /SUBSYSTEM:console /ENTRY:entry библиотеку kernel32.lib взял также из пакета DDK,после линковки получаю экзешник,запускаю его и сразу он вылетает с ошибкой,не могу понять в чём причина
Скинь бинарник лучше. Или собери этим http://masm32.com/board/index.php?board=53.0 Я тоже не экстрасенс, но предполагаю, что что-то с атрибутами секций , скажем на кодосекцию нет права на выполнения.
Так а линкер тебе никаких ворнингов не выдал? Очень странно, что у тебя код на одной странице (1000h которая), а исполнять он пытается другую (2000h которая). Можно предположить, что у тебя с точкой входа что-то не то, но тогда бы линкер ругался на то, что ты неправильно ее указал или еще чего. Открой объектный файл в IDA или в другом дизассемблере и посмотри, чего он там нагенерил, может метку entry не сделал, или она по сишному называется там _entry или еще чего.
Rel, не каких ворнингов не было --- Сообщение объединено, 7 сен 2020 --- Rel, я посмотрел,там она называется entry,предполагаю что в kernel32.lib проблема
Ну я посмотрел бинарь, точка входа у тебя нормальная. В начале секции (2000) у тебя лежит таблица импорта. Я не шарю в масме, но ты пытаешься вызвать как код запись в таблице импорта. Вероятно тебе не надо объявлять и пытаться вызвать __imp_ExitProcess, а вызывать собственно ExitProcess, не?
Rel, мой масм вообще это не может сбилдить; если заменить первую строку вот так Код (ASM): include \masm32\include64\masm64rt.inc ;EXTERN __imp_ExitProcess:proc тогда работает. А если взять билд Entropy, то там всего лишь надо поменять (в бинарнике, код то идентичный) call [exitprocess] на call qword ptr [exitprocess] , в х64дбг или в иде меняем, и норм работает. Почему так - хз, но факт.