Вопрос по линкеру MS Visual Studio

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 6 янв 2011.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Есть ли какая то директива для него,которая позволяет задавать порядок расположения секций?Допустим я хочу что бы секция ".rdata" была последней в выходном файле.Как это линкеру указать?
     
  2. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    _nic
    Никак.
    Последняя секция будет секция релоков. Предпоследняя - ресурсы. По другому никак.
    Если нет ни ресурсов, ни релоков, то можешь объединить .data и .rdata секции. Тогда секция .rdata будет последней

    делается директивой /MERGE
     
  3. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    По какому принципу можно или нельзя,обьединять секции?
     
  4. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Нельзя объединять секцию ресурсов с какой-либо еще
    Нельзя объединять секцию релоков с какой-либо еще
    Все остальное - можно
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    не получится только для MS линкера, а так в принципе можно
     
  6. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    А можно по подробней ,о возможных вриантах извращений с другими линкерами?
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    можно сделать в фасме полностью валидный с точки зрения формата экзешник без какого-либо линкера с одной секцией и ресурсами

    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. IDC_EXIT   = 100
    7. IDC_OPEN   = 101
    8. HTCAPTION  =   2
    9.  
    10. macro WM_CASE reg, [msg]
    11. {
    12.   forward
    13.     cmp reg, WM_#msg
    14.     je .#msg
    15. }
    16.  
    17.  
    18. section '.rsrc' code readable writeable executable
    19.  
    20. data resource
    21.  
    22.  ; resource directory
    23.   directory RT_DIALOG,dialogs,\
    24.             RT_ICON, icons,\
    25.             RT_GROUP_ICON, group_icons
    26.  
    27.  ; resource subdirectories
    28.   resource dialogs,\
    29.            200, LANG_ENGLISH+SUBLANG_DEFAULT, main_dialog
    30.   resource icons,\
    31.            1, LANG_NEUTRAL, icon_data
    32.  
    33.   resource group_icons,\
    34.            400, LANG_NEUTRAL, main_icon
    35.  
    36.   dialog main_dialog,'Test',0,0,164,140,DS_MODALFRAME+DS_CENTER+WS_POPUP+WS_VISIBLE+WS_CAPTION+WS_SYSMENU,\
    37.                                         WS_EX_DLGMODALFRAME, ,'Tahoma',8
    38.     dialogitem 'BUTTON','Exit',IDC_EXIT,115,120,42,14,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON
    39.     dialogitem 'BUTTON','Open',IDC_OPEN,115,60,42,14,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON
    40.   enddialog
    41.  
    42.   icon main_icon, icon_data, 'ida.ico'
    43.  
    44. end data
    45.  
    46. align 4
    47. proc DlgProc, hDlg, uMsg, wParam, lParam
    48.     mov eax, [uMsg]
    49.     WM_CASE eax, INITDIALOG, COMMAND, CLOSE, LBUTTONDOWN
    50. .r0:
    51.     xor eax, eax
    52.     jmp .return
    53. .INITDIALOG:
    54.     invoke LoadIcon, [hInstance], 400
    55.     invoke SendMessage, [hDlg], WM_SETICON, ICON_BIG, eax
    56.     jmp .r1
    57. .COMMAND:
    58.     mov eax, [wParam]
    59.     cmp ax, IDCANCEL
    60.     je .exit
    61.     cmp ax, IDC_EXIT
    62.     je .exit
    63.     cmp ax, IDC_OPEN
    64.     jne .r0
    65.         mov [ofn.lStructSize], sizeof.OPENFILENAME
    66.         push [hDlg]
    67.         pop [ofn.hwndOwner]
    68.         mov [ofn.nMaxFile], 512
    69.         mov [ofn.lpstrFile], StrFile
    70.         mov [ofn.lpstrTitle], StrTitle
    71.         mov [ofn.lpstrFilter], StrFilter
    72.         mov [ofn.Flags], OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY
    73.         invoke GetOpenFileName, ofn
    74.         test eax, eax
    75.         jz .r1
    76.         invoke MessageBox, [hDlg], StrFile, StrTitle, 0
    77.     jmp .r1
    78. .exit:
    79.     invoke SendMessage, [hDlg], WM_CLOSE, 0, 0
    80.     jmp .r1
    81. .LBUTTONDOWN:
    82.     invoke SendMessage, [hDlg], WM_NCLBUTTONDOWN, HTCAPTION, [lParam]
    83.     jmp .r1
    84. .CLOSE:
    85.     invoke EndDialog, [hDlg], 0
    86. .r1:
    87.     xor eax, eax
    88.     inc eax
    89. .return:
    90.     ret
    91. endp
    92.  
    93. start:
    94.     invoke GetModuleHandle, NULL
    95.     mov [hInstance], eax
    96.     invoke DialogBoxParam, eax, 200, 0, DlgProc, 0
    97.     invoke ExitProcess, 0
    98.  
    99. StrTitle        db "Select File",0
    100. StrFilter       db "All Files (*.*)",0,"*.*",0,0
    101.  
    102. align 4
    103. ofn             OPENFILENAME
    104. hInstance       dd  ?
    105. StrFile         rb 512
    106.  
    107. data import
    108.  
    109. library kernel32,'KERNEL32.DLL',\
    110.         user32,'USER32.DLL',\
    111.         comdlg32,'COMDLG32.DLL'
    112.  
    113. include '%fasminc%\APIA\KERNEL32.INC'
    114. include '%fasminc%\APIA\USER32.INC'
    115. include '%fasminc%\APIA\COMDLG32.INC'
    116.  
    117. end data