|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 11, 2004 01:06:56 Пытался тут написать Win32-программу, не импортирующую ни одной функции из DLL-ек. Для этого нашел в памяти (через стек) kernel32.dll, её таблицу экспорта, а в ней - функцию GetProcAddress, при помощи которой, в свою очередь, получил адрес ExitProcess. Ну, в общем-то, это к делу, наверное, не очень-то относится. Данная программа компилируется, однако, линкер вылетает с ошибкой LINK : error : Internal error during ReadSymbolTable ExceptionCode = C0000005 ExceptionFlags = 00000000 ExceptionAddress = 00436AE1 NumberParameters = 00000002 ExceptionInformation[ 0] = 00000000 ExceptionInformation[ 1] = 00000038 Причем, если в конец программы xor eax, eax push eax call f_ExitProcess (в f_ExitProcess записан адрес ExitProcess) дописываю call ExitProcess (что, в принципе, влечет за собой импорт функции ExitProcess) - всё линкуется и работает замечательно. Таким образом, чтобы заставить всё это слинковаться, в программу приходится включать "для виду" произвольные Win32-функции. Все вышесказанное справедливо при линковании с ключом /DEBUG. С ключом /RELEASE программа работает и без "добавок". Я использую masm32, компилирую с ключами /c /coff /Cp /Zi /Zd /Zf /nologo /I"..",v.asm 1517975170__v.Asm |
|
|
Дата: Ноя 11, 2004 04:06:50 · Поправил: q_q NCRangeR Какой линкер? Сделал bat-файл @echo off set path=C:\MASM32\BIN;%PATH% set include=C:\MASM32\INCLUDE;%INCLUDE% set lib=C:\MASM32\LIB;%LIB% ml.exe /c /coff /Cp /Zi /Zd /Zf v.asm link.exe /DEBUG /subsystem:windows v.obj dir v.*запустил и получил C:\2>do_it.bat
Том в устройстве C не имеет метки.
Серийный номер тома: 84F7-E3EC
Содержимое папки C:\2
11.11.2004 07:52 3 321 v.asm
1 файлов 3 321 байт
0 папок 9 879 871 488 байт свободно
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved
Assembling: v.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Том в устройстве C не имеет метки.
Серийный номер тома: 84F7-E3EC
Содержимое папки C:\2
11.11.2004 07:52 3 321 v.asm
11.11.2004 08:05 6 443 v.exe
11.11.2004 08:05 9 200 v.ilk
11.11.2004 08:05 225 422 v.obj
11.11.2004 08:05 345 088 v.pdb
5 файлов 589 474 байт
0 папок 9 879 273 472 байт свободно
C:\2>PS call Exitprocess в конце исходника закомментирован. |
|
|
Дата: Ноя 12, 2004 06:32:10 · Поправил: NCRangeR Спасибо за ответ. Однако, у меня тот же самый bat (с поправкой на то, что masm находится в g:\masm32, но, думаю, это несущественно) выдает следующее:
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved
Assembling: v.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
LINK : LNK6004: v.exe not found or not built by the last incremental link; performing full link
LINK : error : Internal error during ReadSymbolTable
ExceptionCode = C0000005
ExceptionFlags = 00000000
ExceptionAddress = 00436AE1
NumberParameters = 00000002
ExceptionInformation[ 0] = 00000000
ExceptionInformation[ 1] = 00000038
CONTEXT:
Eax = 00000000 Esp = 0012F990
Ebx = 00000000 Ebp = 3FFF0000
Ecx = 00000000 Esi = 40000040
Edx = 0012F764 Edi = 3FFF0000
Eip = 00436AE1 EFlags = 00010206
SegCs = 0000001B SegDs = 00000023
SegSs = 00000023 SegEs = 00000023
SegFs = 0000003B SegGs = 00000000
Dr0 = 0012F990 Dr3 = 00000000
Dr1 = 3FFF0000 Dr6 = 00000000
Dr2 = 00000000 Dr7 = 00000000
Volume in drive G is PROGRAMMING
Volume Serial Number is 0CE2-B2BE
Directory of G:\bbb
12.11.2004 06:21 3я321 v.Asm
12.11.2004 06:22 196 v.bat
12.11.2004 06:24 524я288 v.exe
12.11.2004 06:24 262я144 v.ilk
12.11.2004 06:24 225я416 v.obj
12.11.2004 06:24 25я600 v.pdb
12.11.2004 06:24 0 v.txt
7 File(s) 1я040я965 bytes
0 Dir(s) 940я180я992 bytes free
:( Провел дополнительные эксперименты, и получил следующее: 1. Линк с дополнительным ключом /debugtype:coff - работает, но количество отладочной информации, мягко говоря, уменьшается. 2. Линк 5,O,$B\LINK.EXE $3 /SUBSYSTEM:WINDOWS /DEBUG /VERSION:4.0 /LIBPATH:"$L" /OUT:"$5" /DEBUGTYPE:BOTH /PDB:NONE (выдрал из конфигурации RadASMa) работает, отладочная информация в порядке, но линкер выдает LINK : warning LNK4027: CVPACK error Хотя, можно сказать, что проблема и решена, все-таки хочется узнать, с чем я столкнулся. |
|
|
Дата: Ноя 12, 2004 11:16:23 · Поправил: q_q NCRangeR Попробовал с ml.exe v6.14.8444, но линковал link.exe /DEBUG /subsystem:windows v.obj получил "твои" ошибки. Значит проблема в ml.exe 2. Линк ... работает ... но линкер выдает ... Сделай CVPACK.EXE видимым через %PATH% и предупреждение пропадет. |
|
|
Дата: Ноя 12, 2004 14:30:03 (выдрал из конфигурации RadASMa) Тут уже несколько раз проскакивала информация о неправильном поведении Link-ера Последнее сообщение было как раз про немалую роль RadAsm. Иногда он формирует строки с неправильным синтаксисом, а у тебя видимо "навел" твою ошибку. Во всех случаях участвуют двойные кавычки. Сам RadAsm не использую, поэтому больше ничего не могу сказать. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070 |