2015-03-04 2 views
1

Создание проекта DLL,Есть ли способ принудительного использования имени функции использования компоновщика, а не ординального для импорта функции?

void foo() { 
    printf("foo"); 
} 

Защиту

LIBRARY 
    EXPORTS 
     foo @ 1 

Создание проекта клиента,

void foo(); 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    foo(); 
    return 0; 
} 

Таблица импорта клиентского исполняемого файла. import table image

В таблице импорта отсутствует имя функции.

Не могли бы вы сказать мне, есть ли способ принудительного использования имени функции использования линкера?

ответ

0

Создайте вторую библиотеку импорта без порядковых: пример

>type foo.names.def 
LIBRARY foo.dll 
EXPORTS 
    foo 

>lib /nologo /def:foo.names.def /machine:x86 
    Creating library foo.names.lib and object foo.names.exp 

Использования:

>type test.c 
void foo(); 

int main() 
{ 
     foo(); 
     return 0; 
} 

>cl /nologo test.c /link foo.names.lib 
test.c 

>dumpbin /nologo /imports:foo.dll test.exe 

Dump of file test.exe 

File Type: EXECUTABLE IMAGE 

    Section contains the following imports: 

    foo.dll 
       40C108 Import Address Table 
       410AA0 Import Name Table 
        0 time date stamp 
        0 Index of first forwarder reference 

        0 foo 

Contrast это с тем, что вы получаете, когда вы используете "оригинальную" библиотеку импорта:

>cl /nologo test.c /link foo.lib 
test.c 

>dumpbin /nologo /imports:foo.dll test.exe 

Dump of file test.exe 

File Type: EXECUTABLE IMAGE 

    Section contains the following imports: 

    foo.dll 
       40C108 Import Address Table 
       410AA0 Import Name Table 
        0 time date stamp 
        0 Index of first forwarder reference 

         Ordinal  1 
+0

Что делать, если я могу изменить библиотеку? – Jichao

+0

@Jichao: Я не понимаю вопрос. Если вы хотите, чтобы непривилегированная-импортирующая библиотека была названа «foo.lib», вы можете сообщить команде lib о создании библиотеки с этим именем. –

Смежные вопросы