LLD BSD EXE

Тема в разделе "NASM", создана пользователем Orbit, 12 ноя 2017.

  1. Orbit

    Orbit Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    109
    Адрес:
    г. Москва
    Как слинковать ехе фаил?
     
  2. Orbit

    Orbit Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    109
    Адрес:
    г. Москва
    Код на nasm, с ошибками и не линкуется:
    Код (ASM):
    1.  
    2. extern WSAStartup
    3. extern WSACleanup
    4. extern socket
    5. extern Sleep
    6. extern ExitProcess
    7. extern accept
    8. extern listen
    9. extern bind
    10.  
    11.  
    12. SECTION .bss
    13.  
    14.   hSocket:  resq 1
    15.  
    16.  
    17. SECTION .data
    18.  
    19. port: equ 777
    20.  
    21. struc WSADATA
    22.   .wVersion:  resw 1
    23.   .wHighVersion:  resw 1
    24.   .szDescription:  resb 256
    25.   .szSystemStatus:  resb 256
    26.   .iMaxSockets:  resd 1
    27.   .iMaxUdpDg:  resd 1
    28.   .lpVendorInfo:  resq 1
    29. endstruc
    30.  
    31. struc sockaddr_in
    32.   .sin_family:  resd 1
    33.   .sin_port:  resd 1
    34.   .sin_addr:  resb in_addr
    35.   .sin_zero:  resb 8
    36.   .size:
    37. endstruc
    38.  
    39. struc in_addr
    40.   .s_addr:  resq 1
    41. endstruc
    42.  
    43. SECTION .code
    44.  
    45. global main
    46.  
    47. main:
    48.  
    49.   mov rdx , [WSADATA]
    50.   mov rcx , 0x202
    51.   call WSAStartup
    52.  
    53.   mov r8 , 0
    54.   mov rdx , 1
    55.   mov rcx , 2
    56.   call socket
    57.  
    58.   mov [hSocket] , rax
    59.  
    60.   mov dword [sockaddr_in.sin_family] , 1
    61.   mov qword [sockaddr_in.sin_addr] , 0
    62.   mov ax , port
    63.   xchg ah , al
    64.   mov [sockaddr_in.sin_port] , ax
    65.  
    66.   mov r8 , sockaddr_in.size
    67.   mov rdx , [sockaddr_in]
    68.   mov rcx , hSocket
    69.   call bind
    70.  
    71.   mov rdx , 13
    72.   mov rcx , hSocket
    73.   call listen
    74.  
    75.   mov r8 , 0
    76.   mov rdx , [sockaddr_in]
    77.   mov rcx , hSocket
    78.   call accept
    79.  
    80.   mov rcx , 60000
    81.   call Sleep
    82.  
    83.  
    84.   call WSACleanup
    85.  
    86.   mov rcx,0
    87.   call ExitProcess
    88.  
    компилирую
    [​IMG]
     
  3. Hacker

    Hacker New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    22
    Код (ASM):
    1.  
    2. extern WSAStartup
    3. extern WSACleanup
    4. extern socket
    5. extern Sleep
    6. extern ExitProcess
    7. extern accept
    8. extern listen
    9. extern bind
    10. SECTION .bss
    11.   hSocket:  resq 1
    12. SECTION .data
    13. port: equ 777
    14. struc WSADATA
    15.   .wVersion:  resw 1
    16.   .wHighVersion:  resw 1
    17.   .szDescription:  resb 256
    18.   .szSystemStatus:  resb 256
    19.   .iMaxSockets:  resd 1
    20.   .iMaxUdpDg:  resd 1
    21.   .lpVendorInfo:  resq 1
    22. endstruc
    23. struc sockaddr_in
    24.   .sin_family:  resd 1
    25.   .sin_port:  resd 1
    26.   .sin_addr:  resq 1
    27.   .sin_zero:  resb 8
    28.   .size:
    29. endstruc
    30. SECTION .text
    31. global MainProc
    32. MainProc:
    33.   mov rdx , [WSADATA]
    34.   mov rcx , 0x202
    35.   call WSAStartup
    36.   mov r8 , 0
    37.   mov rdx , 1
    38.   mov rcx , 2
    39.   call socket
    40.   mov [hSocket] , rax
    41.   mov dword [sockaddr_in.sin_family] , 1
    42.   mov qword [sockaddr_in.sin_addr] , 0
    43.   mov ax , port
    44.   xchg ah , al
    45.   mov [sockaddr_in.sin_port] , ax
    46.   mov r8 , sockaddr_in.size
    47.   mov rdx , [sockaddr_in]
    48.   mov rcx , hSocket
    49.   call bind
    50.   mov rdx , 13
    51.   mov rcx , hSocket
    52.   call listen
    53.   mov r8 , 0
    54.   mov rdx , [sockaddr_in]
    55.   mov rcx , hSocket
    56.   call accept
    57.   mov rcx , 60000
    58.   call Sleep
    59.   call WSACleanup
    60.   mov rcx,0
    61.   call ExitProcess
    62.  
    Компилирую в MinGW
    Alexey@Antares MINGW64 ~
    $ nasm.exe cmd.asm -f win64 -o cmd.obj

    Линкую
    Alexey@Antares MINGW64 ~
    $ lld-link.exe cmd.obj
    entry point must be defined

    Ошибки не вижу :dntknw:
     
  4. Hacker

    Hacker New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    22
    Я так понимаю entry point нужно указывать непосредственно линкеру?
     
  5. Hacker

    Hacker New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    22
    Можно указать entry point вручную:

    C:\msys64\home\Alexey>lld-link.exe -e start cmd.obj
    cmd.obj: undefined symbol: WSAStartup
    cmd.obj: undefined symbol: WSACleanup
    cmd.obj: undefined symbol: socket
    cmd.obj: undefined symbol: Sleep
    cmd.obj: undefined symbol: ExitProcess
    cmd.obj: undefined symbol: accept
    cmd.obj: undefined symbol: listen
    cmd.obj: undefined symbol: bind
    Link failed


    Помогите исправить, я вообще запутался :dntknw:
     
  6. Hacker

    Hacker New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    22
    Я так понимаю нужны файлы типо dll.def dll.lib и подключить их к проекту надо?
    Вот читаю статью HOWTO Create an Import Library for a DLL using MinGW но что-то не особо получается пока. Какой именно файл нужен и как его прикрепить к проекту?
     
  7. Hacker

    Hacker New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    22
    [​IMG]

    Не получается экспортировать библиотеку.
     
  8. Hacker

    Hacker New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    22
    Разобрался как создавать .lib

    pexports C:\Windows\System32\user32.dll > user32.def
    dlltool -d user32.def -l user32.lib

    Подскажите где ошибка в коде?

    Код (ASM):
    1.  
    2. BITS 64
    3.  
    4. extern ExitProcess
    5. extern MessageBoxA
    6.  
    7. SECTION .data
    8.  MessageBoxText    db "Do you want to exit?", 0
    9.  MessageBoxCaption db "MessageBox 64", 0
    10.  
    11. SECTION .text
    12. global start
    13.  
    14. start:
    15.  
    16. nop
    17. nop
    18. nop
    19.  
    20.   mov r9 , 0
    21.   mov r8 , MessageBoxCaption
    22.   mov rdx , MessageBoxText
    23.   mov rcx , 0
    24.   call MessageBoxA
    25.  
    26.   mov rcx , 0
    27.   call ExitProcess
    28.  
    29. SECTION .drectve info
    30.         db '/defaultlib:kernel32.lib /defaultlib:user32.lib'
    31.  
    nasm test.asm -f win64 -o test.obj
    lld-link -e start /LIBPATH:C:\msys64\home\Alexey\kernel32.lib C:\msys64\home\Alexey\user32.lib /SUBSYSTEM:WINDOWS test.obj

    Компилируется, линкуестя, но не работает

    [​IMG]
     
  9. Hacker

    Hacker New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2018
    Сообщения:
    22
    lld-link находится в msys2 в пакете вместе с lld
    pacman -S nasm lld