Help me with PE

Тема в разделе "WASM.BEGINNERS", создана пользователем qwertyui, 26 фев 2009.

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    и в чем проблема? бери и выводи, имя секции по смещению 0
     
  2. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    qwertyui, мож лучше на с++?
    Код (Text):
    1. Name1 = I_want_the_name_of_section()
    2. print(Name1)
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    я только не пойму одного. из-за не охоты отказаться от идиотских масмовских привычек и соответственно выбросить assume раздувать столько шума.
    что допустим тебе без assume выйдет если написать на ассемблере, а не на масме
    Код (Text):
    1. push 0
    2. push edi
    3. push edi
    4. push 0
    5. call [MessageBoxA]
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    а я вызываю мессаджбокс так: MessageBoxA(0,edi,0,0)
     
  5. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    ояебутс остыл? теперь попробуй волшебный опкод lea
     
  6. qwertyui

    qwertyui New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2009
    Сообщения:
    28
    litrovith
    что делает lea? и вообще хочется чтоб assume работал...
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    забей на assume. это в ассемблере лишнее! а lea - Load Effective Address - типа mov reg32, address, но возможно написать так lea eax, [eax+eax*4] и это выполнится, а в eax будет число умноженное на 5 или так lea eax, [ebx+ecx*8+0xFFFFFFE0] ну тут все аналогично, но тут еще круче. mov eax, ecx/shl eax, 3/add eax, ebx/sub eax, 32. о как и все за одну команду. правда клево. а можно так
    lea eax, [edi+Name1] и в eax указатель на имя секции (и без всяких assume)
     
  8. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    qwertyui, перечитай внимательно посты #16, #17, #19, потом определись чего ты хочешь от assume

    max7C4
    поосторожнее с высказываниями, если что я первый начну вас забрасывать камнями).
    конечно, ето не по-дзенски, но оч полезная фича.
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    litrovithконкретно на фасме - лишнее.
    Код (Text):
    1. vitrual at reg
    2.  
    3. end virtual
    и не надо никаких assume
     
  10. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    хм... У меня та же проблема была с assume , я из структуры IMAGE_SECTION_HEADER убрал union ->assume заработал.
    Пытаюсь вывести имя секции вылазит пустой мессадж бокс. В отладчик text = NULL. Подскажите что делать? вот код
    Код (Text):
    1. format PE GUI 5.0
    2. include '%fasminc%\win32ax.inc'
    3. include '%fasminc%\macro\masm.inc'
    4.  
    5. section '.code' code writeable readable executable
    6.  
    7. ;const
    8. IMAGE_NT_SIGNATURE equ 4550h
    9. IMAGE_DOS_SIGNATURE equ 5A4Dh
    10. ImageNTSize equ 78h
    11. SectionHeaderSize equ 40
    12.  
    13. ;structs
    14.  
    15. struct IMAGE_SECTION_HEADER
    16.   Name1 db 8 dup(0)
    17.  
    18.  
    19.   VirtualAddress dd ?
    20.   SizeOfRawData dd ?
    21.   PointerToRawData dd ?
    22.   PointerToRelocations dd ?
    23.   PointerToLinenumbers dd ?
    24.   NumberOfRelocations dw ?
    25.   NumberOfLinenumbers dw ?
    26.   Characteristics dd ?
    27. ends
    28.  
    29.  
    30. struct IMAGE_DOS_HEADER
    31. e_magic           dw      ?
    32.   e_cblp            dw      ?
    33.   e_cp              dw      ?
    34.   e_crlc            dw      ?
    35.   e_cparhdr         dw      ?
    36.   e_minalloc        dw      ?
    37.   e_maxalloc        dw      ?
    38.   e_ss              dw      ?
    39.   e_sp              dw      ?
    40.   e_csum            dw      ?
    41.   e_ip              dw      ?
    42.   e_cs              dw      ?
    43.   e_lfarlc          dw      ?
    44.   e_ovno            dw      ?
    45.   e_res             dw   4 dup(0)
    46.   e_oemid           dw      ?
    47.   e_oeminfo         dw      ?
    48.   e_res2            dw  10 dup(0)
    49.   e_lfanew          dd      ?
    50. ends
    51.  
    52. struct IMAGE_DATA_DIRECTORY
    53.  VirtualAddress    dd      ?
    54.   isize             dd      ?
    55. ends
    56.  
    57. struct IMAGE_FILE_HEADER
    58. Machine               dw    ?
    59.   NumberOfSections      dw    ?
    60.   TimeDateStamp         dd   ?
    61.   PointerToSymbolTable  dd   ?
    62.   NumberOfSymbols       dd   ?
    63.   SizeOfOptionalHeader  dw    ?
    64.   Characteristics       dw    ?
    65. ends
    66.  
    67. struct IMAGE_OPTIONAL_HEADER32
    68.  Magic                         dw       ?
    69.   MajorLinkerVersion            db       ?
    70.   MinorLinkerVersion            db       ?
    71.   SizeOfCode                    dd      ?
    72.   SizeOfInitializedData         dd      ?
    73.   SizeOfUninitializedData       dd      ?
    74.   AddressOfEntryPoint           dd      ?
    75.   BaseOfCode                    dd      ?
    76.   BaseOfData                    dd      ?
    77.   ImageBase                     dd      ?
    78.   SectionAlignment              dd      ?
    79.   FileAlignment                 dd      ?
    80.   MajorOperatingSystemVersion   dw       ?
    81.   MinorOperatingSystemVersion   dw       ?
    82.   MajorImageVersion             dw       ?
    83.   MinorImageVersion             dw       ?
    84.   MajorSubsystemVersion         dw       ?
    85.   MinorSubsystemVersion         dw       ?
    86.   Win32VersionValue             dd      ?
    87.   SizeOfImage                   dd      ?
    88.   SizeOfHeaders                 dd      ?
    89.   CheckSum                      dd      ?
    90.   Subsystem                     dw       ?
    91.   DllCharacteristics            dw       ?
    92.   SizeOfStackReserve            dd      ?
    93.   SizeOfStackCommit             dd      ?
    94.   SizeOfHeapReserve             dd      ?
    95.   SizeOfHeapCommit              dd      ?
    96.   LoaderFlags                   dd      ?
    97.   NumberOfRvaAndSizes           dd      ?
    98.  
    99. ends
    100.  
    101. struct IMAGE_NT_HEADERS  
    102. Signature dd ?
    103. FileHeader IMAGE_FILE_HEADER
    104. OptionalHeader IMAGE_OPTIONAL_HEADER32
    105. ends
    106.  
    107. ;var
    108.  
    109. Name2 db 512 dup (0)
    110. hFile dd ?
    111. hMapping dd ?
    112. pMapping dd ?
    113. szYes db 'YES',0
    114. szNo db 'no',0
    115. szPath db 'd:\test.exe',0
    116. ;esi счетчик  ebx кол во секций
    117.  
    118. entry $
    119. invoke CreateFile,szPath,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    120. mov [hFile],eax
    121. invoke CreateFileMapping,[hFile],0,PAGE_READONLY,0,0,0
    122. mov [hMapping],eax
    123. invoke MapViewOfFile,[hMapping],FILE_MAP_READ,0,0,0
    124. mov [pMapping],eax
    125. mov edi,[pMapping]
    126. assume edi:IMAGE_DOS_HEADER
    127. cmp [edi.e_magic],IMAGE_DOS_SIGNATURE
    128. jnz _no
    129. add edi,[edi.e_lfanew]
    130. assume edi:IMAGE_NT_HEADERS
    131. cmp [edi.Signature],IMAGE_NT_SIGNATURE
    132. jz _ok
    133.  
    134. _exit:
    135. invoke ExitProcess,0
    136.  
    137. _no:
    138. invoke MessageBox,0,szNo,0,0
    139. jmp _exit
    140. _ok:
    141. mov ax,[edi.FileHeader.NumberOfSections];теперь ax содержит колво секций в файле
    142. movzx ebx,ax
    143. add edi,sizeof.IMAGE_OPTIONAL_HEADER32
    144. assume edi:IMAGE_SECTION_HEADER;!!!!!!!!!
    145.  
    146. invoke MessageBox,0,dword [edi.Name1],0,0
    147.  
    148.  
    149. invoke MessageBox,0,szYes,0,0
    150. jmp _exit
    151. section '.import' import readable writable
    152. library kernel32, 'kernel32.dll', \
    153. user32, 'user32.dll'
    154. include '%fasminc%\API\kernel32.inc'
    155. include '%fasminc%\API\user32.inc'
     
  11. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
  12. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    ну епт точно... Исправил все только теперь text=7865742E ??? и программа падает при вызове мессадж бокса.
    Кстати DataDirectory rb sizeof.IMAGE_DATA_DIRECTORY * 16 правильно описан массив структур?
     
  13. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    MaxOn, неужели сложно внимательно прочитать тему?
     
  14. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    ну дык почитал ничо что мне бы помогло я чтото не вижу
     
  15. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    MaxOn, хм без матов сложно высказываться, но попытаюсь. Посмотрите в свой сорц: Name1 db 8 dup(0) = dword [edi.Name1]... Дальше продолжать?
    Если вы не понимаете разницы дело другое
     
  16. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    если убрать dword то фасм пишет invalid size of operand/= сорри за тупость ..
    PS Разницу я понимаю
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    edi.Name1 - уже массив байт, а не указатель.
    тем более строка может и не завершаться нулём.
     
  18. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    И правильно пишет, потому что MessageBoxу в качестве данного параметра нуна задавать указатель на текст(имя секции) ............ бррррр не, я уже пьяный (

    вобщем как сантехник(я) программисту:
    Код (Text):
    1. assume edi:IMAGE_SECTION_HEADER
    2. ;вот так
    3. lea edi, [edi.Name1]
    4. invoke MessageBox,0,edi,0,0
     
  19. MaxOn

    MaxOn Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    45
    Большое спасибо!!!!!
    PS Сантехник это я 1!!!111