purebasic.info

PureBasic forum
Текущее время: Вт окт 23, 2018 4:11 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 11:05 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб май 21, 2011 10:27 pm
Сообщений: 246
Откуда: Брест , Беларусь
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
А вы мне обьясните
Вот драйвера вы пишите на Пурике
Я молчу про код к примеру типа
Код:
1
if text$=""

но как использовать функции сравнения в ядре? Как пользоваться всеми строчными процедурками

_________________
Выпьем ещё раз - чтобы выпить в следущий раз! (С) Иван Пашкевич


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 11:12 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11303
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
kirill2000d писал(а):
но как использовать функции сравнения в ядре
Цитата:
Функция _strnicmp сравнивает две ANSI-строки независимо от регистра букв. Сравнивает она только то количество символов, которое передано в третьем параметре.
В ядре есть функция _strnicmp().
Ее можно использовать для сравнения строк.
Про динамические строки пурика нужно забыть. Либо указатели на массив символов, либо строка фиксированной длины, типа String.s{100}.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 10, 2012 11:45 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс ноя 07, 2010 12:19 pm
Сообщений: 281
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр
Так я про это и говорю. Обычно отдельно компилят скрипт и асм, затем линкер обьектники соединяет.

_________________
Materia Lucida


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 26, 2012 10:38 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Продолжим изучать PE формат от мелкософта (если кому-то это интересно).
Забацаем небольшой дизассемблер с использованием библиотеки BeaEngine.lib
Для работы должна быть установлена PB библиотека ScintillaStaticFull
Предупреждаю, большие файлы (> 1000 Кб) дизассемблит очень долго :? Это связано с большой работой со строками (надо как-то бороться)


Вложения:
Disasm.rar [57.87 KiB]
Скачиваний: 228

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Сб апр 04, 2015 5:37 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Идем дальше, предлагаю вашему вниманию утилиту для пересчета файловых адресов из VA (виртуального адреса) в RVA(Relative Virtual Address или относительный адрес, относительно адреса загрузки (ImageBase)) и FO (смещение в файле или File Offset) ну и наоборот. Замечу сразу, что задача эта не тривиальная, как может показаться с первого взгляда. Нужно учитывать несколько факторов, такие как выравнивание секции (SectionAlignment), размер секции в файле (SizeOfRawData), виртуальный адрес (VirtualAddress) и виртуальный размер (VirtualSize) секции.
Вобщем кому интересно, "налетай, торопись, покупай живопись" (c)
Итерфейс окна частично нагло спер у manhunter'a http://www.manhunter.ru/releases/250_fi ... r_1_3.html)

Кто хочет постичь нирвану, читать до просветления
http://www.wasm.ru/wault/article/show/packlast01 Об упаковщиках в последний раз: Часть первая - теоретическая
http://www.wasm.ru/wault/article/show/packers2 Об упаковщиках в последний раз. Часть вторая


Вложения:
PE Calc.rar [6.06 KiB]
Скачиваний: 147

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Сб апр 04, 2015 6:25 pm 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
pablov
Спасибо, сенсей!
Вообще, чем больше читаю manhunter'a и вникаю в кодинг, тем больше вижу "оригинальных" статей, которые manhunter просто перевел на fasm (имхо, только испортил. Ибо вникать в его дзенский стиль джампов-ретов тяжело:). Более-менее серьезные вещи без исходников. Статьи по взлому (мне:) малоинтересны - однотипны и не учат виртуозному владению инструментами.. Интересен оффлайн, гаджеты и еда:)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Вс окт 04, 2015 5:42 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Добавление секции в Portable Executable файлы х32 / х 64

Код исправлен 9.10.2015

Доработал процедуру добавления секции в PE-файл. Исправил ошибки, кой чего добавил...
SectionAdd
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
EnableExplicit
 
Enumeration
  #Main
EndEnumeration
 
Enumeration
  #String_File
  #btn_0
  #btn_1
  #String_Name
  #String_Size
  #Text_4
  #Text_5
  #Text_6
  #CheckBox_rnd
  #ComboBox
  #FrameGadget
  #HyperLink
EndEnumeration
 
#IMAGE_SCN_CNT_CODE            = $00000020           ; The section contains executable code.
#IMAGE_SCN_MEM_EXECUTE         = $20000000           ; The section can be executed as code.
#IMAGE_SCN_MEM_READ            = $40000000           ; The section can be read.
#IMAGE_NT_OPTIONAL_HDR32_MAGIC = $10B                ; Файл является исполняемым образом. (32-битное приложение.)
#IMAGE_NT_OPTIONAL_HDR64_MAGIC = $20B                ; Файл является исполняемым образом. (64-битное приложение.)
#IMAGE_ROM_OPTIONAL_HDR_MAGIC  = $107                ; Файл образа ПЗУ.
 
#IMAGE_DOS_SIGNATURE           = $5A4D               ;  MZ сигнатура.
#IMAGE_OS2_SIGNATURE           = $454E               ;  NE сигнатура.
#IMAGE_OS2_SIGNATURE_LE        = $454C               ;  LE сигнатура.
#IMAGE_NT_SIGNATURE            = $00004550           ;  PE00 сигнатура.
 
#IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14           ; Дескриптор .NET Это новая структура, появившаяся в исполняемых файлах Microsoft .NET
                                                     ; http://cs.usu.edu.ru/docs/pe/dirs4.html#8
Structure IMAGE_NT_HEADERS_64        ; Описываю эту структуру здесь, так как во встроенном описании в версиях PureBasic 5.20 ; 5.30
  Signature.l                        ; была ошибка. Пруф: http://www.purebasic.fr/english/viewtopic.php?f=4&t=61766&hilit=OptionalHeaderI
  FileHeader.IMAGE_FILE_HEADER       ; исправлена тока в версии 5.4
  OptionalHeader.IMAGE_OPTIONAL_HEADER64  
EndStructure
 
Define.i Event, EventWindow, EventGadget, EventType, EventMenu, Arch, i
Define.s file, s$
 
Global DragDrop.s = "Drag & Drop Or Select PE file..."
 
Procedure SectionAdd_32(file.s, NewSectSize.i, NameSect.s)
 Protected *DOS_HEADER.IMAGE_DOS_HEADER            
 Protected *NT_HEADERS.IMAGE_NT_HEADERS
 Protected *SECTION_HEADERS.IMAGE_SECTION_HEADERS
 Protected *NewSecEntry.IMAGE_SECTION_HEADER
 Protected.i FileSize, BufAdr, MaxRVAIndex, MaxRVA, i, OldEP
 Protected newfile.s
   If OpenFile(0, file)  
     FileSize   = FileSize(file)
     FileSize   = FileSize + NewSectSize  
     BufAdr     = AllocateMemory(FileSize + NewSectSize)
     If ReadFile(0, file)
        ReadData(0, BufAdr, FileSize)
        CloseFile(0)
        ; Инициируем структуры  
        *DOS_HEADER      = BufAdr
        *NT_HEADERS      = BufAdr + *DOS_HEADER\e_lfanew
        *SECTION_HEADERS = *NT_HEADERS\OptionalHeader + *NT_HEADERS\FileHeader\SizeOfOptionalHeader
        If *DOS_HEADER\e_magic = #IMAGE_DOS_SIGNATURE And *NT_HEADERS\Signature = #IMAGE_NT_SIGNATURE ; Если это PE файл
           ; Если в файле присутствует директория .NET, то есть файл собран при помощи .NET технологий
           ; секцию не добавляем, т.к. я пока не знаю как добавлять секции к .NET файлам
           If *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR]\VirtualAddress > 0
               MessageRequester("Ахтунг", "Can not add the section. File Microsoft.NET", #MB_OK|#MB_ICONWARNING)
               If BufAdr : FreeMemory(BufAdr) : EndIf
               ProcedureReturn
           EndIf  
           ; Поиск максимального RVA
           MaxRVA = *SECTION_HEADERS\ish[0]\VirtualAddress
           MaxRVAIndex = 0
           For i = 1 To *NT_HEADERS\FileHeader\NumberOfSections - 1
              If *SECTION_HEADERS\ish[i]\VirtualAddress > MaxRVA  
                 MaxRVA = *SECTION_HEADERS\ish[i]\VirtualAddress
                 MaxRVAIndex = i
              EndIf      
           Next i
           *NewSecEntry = *SECTION_HEADERS\ish[*NT_HEADERS\FileHeader\NumberOfSections]
           FillMemory(*NewSecEntry, SizeOf(IMAGE_SECTION_HEADER), 0, #PB_Byte)
           MoveMemory(@NameSect, @*NewSecEntry\SecName[0], Len(NameSect))         ; запишем имя новой секции
           *NewSecEntry\VirtualSize     = NewSectSize
           If NewSectSize <= *NT_HEADERS\OptionalHeader\FileAlignment
             *NewSecEntry\SizeOfRawData = *NT_HEADERS\OptionalHeader\FileAlignment
           Else        ; Выравниваем SizeOfRawData до числа больше NewSectSize (VirtualSize) и кратному FileAlignment
             *NewSecEntry\SizeOfRawData = *NT_HEADERS\OptionalHeader\FileAlignment * (NewSectSize / *NT_HEADERS\OptionalHeader\FileAlignment)
             If NewSectSize % *NT_HEADERS\OptionalHeader\FileAlignment > 0
                *NewSecEntry\SizeOfRawData + *NT_HEADERS\OptionalHeader\FileAlignment
             EndIf
           EndIf
           *NewSecEntry\Characteristics = #IMAGE_SCN_MEM_EXECUTE | #IMAGE_SCN_MEM_READ | #IMAGE_SCN_CNT_CODE  ;$60000020   ; выполнение, чтение, содержит выполняемый код
           ;  Выравниваем секцию  ############################################################
           If (MaxRVA + *SECTION_HEADERS\ish[MaxRVAIndex]\VirtualSize) & $00000fff > 0
               *NewSecEntry\VirtualAddress = (MaxRVA + *SECTION_HEADERS\ish[MaxRVAIndex]\VirtualSize) & $fffff000 + *NT_HEADERS\OptionalHeader\SectionAlignment
           Else
               *NewSecEntry\VirtualAddress = MaxRVA + *SECTION_HEADERS\ish[MaxRVAIndex]\VirtualSize
           EndIf
           If NewSectSize & $00000fff > 0
               *NT_HEADERS\OptionalHeader\SizeOfImage = (*NewSecEntry\VirtualAddress + NewSectSize) &  $fffff000 + *NT_HEADERS\OptionalHeader\SectionAlignment
           Else
               *NT_HEADERS\OptionalHeader\SizeOfImage = *NewSecEntry\VirtualAddress + NewSectSize
           EndIf          
           ;##################################################################################  
           *NewSecEntry\PointerToRawData = *SECTION_HEADERS\ish[*NT_HEADERS\FileHeader\NumberOfSections-1]\PointerToRawData + *SECTION_HEADERS\ish[*NT_HEADERS\FileHeader\NumberOfSections-1]\SizeOfRawData
           *NT_HEADERS\FileHeader\NumberOfSections + 1              ;  Добавляем число секций
            ; меняем EP
           OldEP = *NT_HEADERS\OptionalHeader\AddressOfEntryPoint   ; запоминаем старую EP
           *NT_HEADERS\OptionalHeader\AddressOfEntryPoint = *NewSecEntry\VirtualAddress
           ; Затираем bound import если он есть
           If *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]\VirtualAddress <> 0
                *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]\VirtualAddress = 0
                *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]\Size = 0        
           EndIf
           ; Запись измененного файла
           newfile = SaveFileRequester("Save new file as...", "", "", 0)
           If newfile
              If CreateFile(0, newfile)
                 FileSeek(0, 0)
                 WriteData(0, BufAdr, *NewSecEntry\PointerToRawData + *NewSecEntry\SizeOfRawData)
                 ; Устанавливаем пойнтер на офсет начала новой секции и записываем нужные инструкции
                 FileSeek(0, *SECTION_HEADERS\ish[MaxRVAIndex + 1]\PointerToRawData)
                 For i = 0 To 20
                    WriteByte(0, $90)
                 Next i
                 WriteByte(0, $68)    ; Прыгаем на родную EP
                 WriteLong(0, OldEP + *NT_HEADERS\OptionalHeader\ImageBase)
                 WriteByte(0, $0C3)
                 CloseFile(0)
                 MessageRequester("Congratulations", "Section added :)", #MB_OK|#MB_ICONINFORMATION)
              Else    
                 MessageRequester("Ахтунг", "Can not create file :(", #MB_OK|#MB_ICONWARNING)
              EndIf
           EndIf  
        Else
           MessageRequester("Ахтунг", "No valid PE File", #MB_OK|#MB_ICONWARNING)
        EndIf  
     EndIf
     If BufAdr : FreeMemory(BufAdr) : EndIf
   Else  
        MessageRequester("Ахтунг", "Can not open file" + Chr(10) + "Possible file is occupied other program, or file is launched.", #MB_OK|#MB_ICONWARNING)
   EndIf
EndProcedure
 
Procedure SectionAdd_64(file.s, NewSectSize.i, NameSect.s)
 Protected *DOS_HEADER.IMAGE_DOS_HEADER            
 Protected *NT_HEADERS.IMAGE_NT_HEADERS_64
 Protected *SECTION_HEADERS.IMAGE_SECTION_HEADERS
 Protected *NewSecEntry.IMAGE_SECTION_HEADER
 Protected.i FileSize, BufAdr, MaxRVAIndex, MaxRVA, i, OldEP
 Protected newfile.s
   If OpenFile(0, file)  
     FileSize   = FileSize(file)
     FileSize   = FileSize + NewSectSize    
     BufAdr     = AllocateMemory(FileSize + NewSectSize)
     If ReadFile(0, file)
        ReadData(0, BufAdr, FileSize)
        CloseFile(0)
        ; Инициируем структуры  
        *DOS_HEADER      = BufAdr
        *NT_HEADERS      = BufAdr + *DOS_HEADER\e_lfanew
        *SECTION_HEADERS = *NT_HEADERS\OptionalHeader + *NT_HEADERS\FileHeader\SizeOfOptionalHeader
        If *DOS_HEADER\e_magic = #IMAGE_DOS_SIGNATURE And *NT_HEADERS\Signature = #IMAGE_NT_SIGNATURE ; Если это PE файл
           ; Если в файле присутствует директория .NET, то есть файл собран при помощи .NET технологий
           ; секцию не добавляем, т.к. я пока не знаю как добавлять секции к .NET файлам  
           If *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR]\VirtualAddress > 0
               MessageRequester("Ахтунг", "Can not add the section. File Microsoft.NET", #MB_OK|#MB_ICONWARNING)
               If BufAdr : FreeMemory(BufAdr) : EndIf
               ProcedureReturn
           EndIf  
           ; Поиск максимального RVA
           MaxRVA = *SECTION_HEADERS\ish[0]\VirtualAddress
           MaxRVAIndex = 0
           For i = 1 To *NT_HEADERS\FileHeader\NumberOfSections - 1
              If *SECTION_HEADERS\ish[i]\VirtualAddress > MaxRVA  
                 MaxRVA = *SECTION_HEADERS\ish[i]\VirtualAddress
                 MaxRVAIndex = i
              EndIf      
           Next i
           *NewSecEntry = *SECTION_HEADERS\ish[*NT_HEADERS\FileHeader\NumberOfSections]
           FillMemory(*NewSecEntry, SizeOf(IMAGE_SECTION_HEADER), 0, #PB_Byte)
           MoveMemory(@NameSect, @*NewSecEntry\SecName[0], Len(NameSect))         ; запишем имя новой секции
           *NewSecEntry\VirtualSize     = NewSectSize
           If NewSectSize < *NT_HEADERS\OptionalHeader\FileAlignment
             *NewSecEntry\SizeOfRawData = *NT_HEADERS\OptionalHeader\FileAlignment
           Else        ; Выравниваем SizeOfRawData до числа больше NewSectSize (VirtualSize) и кратному FileAlignment
             *NewSecEntry\SizeOfRawData = *NT_HEADERS\OptionalHeader\FileAlignment * (NewSectSize / *NT_HEADERS\OptionalHeader\FileAlignment)
             If NewSectSize % *NT_HEADERS\OptionalHeader\FileAlignment > 0
                *NewSecEntry\SizeOfRawData + *NT_HEADERS\OptionalHeader\FileAlignment
             EndIf
           EndIf
           *NewSecEntry\Characteristics = #IMAGE_SCN_MEM_EXECUTE | #IMAGE_SCN_MEM_READ | #IMAGE_SCN_CNT_CODE  ;$60000020   ; выполнение, чтение, содержит выполняемый код
           ;  Выравниваем секцию  ############################################################
           If (MaxRVA + *SECTION_HEADERS\ish[MaxRVAIndex]\VirtualSize) & $00000fff > 0
               *NewSecEntry\VirtualAddress = (MaxRVA + *SECTION_HEADERS\ish[MaxRVAIndex]\VirtualSize) & $fffff000 + *NT_HEADERS\OptionalHeader\SectionAlignment
           Else
               *NewSecEntry\VirtualAddress = MaxRVA + *SECTION_HEADERS\ish[MaxRVAIndex]\VirtualSize
           EndIf
           If NewSectSize & $00000fff > 0
               *NT_HEADERS\OptionalHeader\SizeOfImage = (*NewSecEntry\VirtualAddress + NewSectSize) &  $fffff000 + *NT_HEADERS\OptionalHeader\SectionAlignment
           Else
               *NT_HEADERS\OptionalHeader\SizeOfImage = *NewSecEntry\VirtualAddress + NewSectSize
           EndIf          
           ;##################################################################################  
           *NewSecEntry\PointerToRawData = *SECTION_HEADERS\ish[*NT_HEADERS\FileHeader\NumberOfSections-1]\PointerToRawData + *SECTION_HEADERS\ish[*NT_HEADERS\FileHeader\NumberOfSections-1]\SizeOfRawData
           *NT_HEADERS\FileHeader\NumberOfSections + 1              ;  Добавляем число секций
           ; *****************************   меняем EP   *************************************
           OldEP = *NT_HEADERS\OptionalHeader\AddressOfEntryPoint   ; запоминаем старую EP
           *NT_HEADERS\OptionalHeader\AddressOfEntryPoint = *NewSecEntry\VirtualAddress
           ; Затираем bound import если он есть
           If *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]\VirtualAddress <> 0
                *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]\VirtualAddress = 0
                *NT_HEADERS\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]\Size = 0        
           EndIf
           ; Запись измененного файла
           newfile = SaveFileRequester("Save new file as...", "", "", 0)
           If newfile
              If CreateFile(0, newfile)
                 FileSeek(0, 0)
                 WriteData(0, BufAdr, *NewSecEntry\PointerToRawData + *NewSecEntry\SizeOfRawData)
                 ; Устанавливаем пойнтер на офсет начала новой секции и записываем нужные инструкции
                 FileSeek(0, *SECTION_HEADERS\ish[MaxRVAIndex + 1]\PointerToRawData)
                 For i = 0 To 20
                    WriteByte(0, $90)
                 Next i
                 WriteByte(0, $50)                                ; сохраняем регистр rax
                 WriteData(0, ?gmh, ?gmhe - ?gmh)                 ; API GetModuleHandle
                                                                  ; в rax база загрузки модуля
                 WriteWord(0, $0548) : WriteLong(0, OldEP)        ; add rax, EP                   ; вычисляем EP
                 WriteLong(0, $24048748)                          ; xchg qword ptr ss:[rsp],rax   ; меняем верхушку стека с rax (Возвращаем первоначальное значение rax, а на стек кладем адрес EP)
                 WriteByte(0, $0C3)                               ; ret                           ; Прыгаем на родную EP
                 CloseFile(0)
                 MessageRequester("Congratulations", "Section added :)", #MB_OK|#MB_ICONINFORMATION)
              Else    
                 MessageRequester("Ахтунг", "Can not create file :(", #MB_OK|#MB_ICONWARNING)
              EndIf
           EndIf  
        Else
           MessageRequester("Ахтунг", "No valid PE File", #MB_OK|#MB_ICONWARNING)
        EndIf  
     EndIf
     If BufAdr : FreeMemory(BufAdr) : EndIf
   Else  
        MessageRequester("Ахтунг", "Can not open file" + Chr(10) + "Possible file is occupied other program, or file is launched.", #MB_OK|#MB_ICONWARNING)
   EndIf
EndProcedure
 
Procedure.i MappingFile(file$)
 Protected.i hFile, lenFile, hFileMap, pFileSizeHigh, MapFile, NT_header
 Protected *DOS_HEADER.IMAGE_DOS_HEADER            
 hFile = CreateFile_(file$, #GENERIC_READ, #FILE_SHARE_READ | #FILE_SHARE_WRITE, #Null, #OPEN_EXISTING, GetFileAttributes_(file$), #Null)      
 If hFile = #INVALID_HANDLE_VALUE
    ProcedureReturn #False
 Else
    lenFile = GetFileSize_(hFile, pFileSizeHigh)
    hFileMap = CreateFileMapping_(hFile, #Null, #PAGE_WRITECOPY, 0, 0, #Null)      
    MapFile = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, lenFile)
    CloseHandle_(hFile)
    If MapFile = 0
       MessageRequester("Ахтунг", "Don not Map File", #MB_OK|#MB_ICONWARNING)
       ProcedureReturn #False
    EndIf  
   ; If PeekB(MapFile) <> $4D And PeekB(MapFile + 1) <> $5A  
    If PeekW(MapFile) <> #IMAGE_DOS_SIGNATURE  
        MessageRequester("Ахтунг", "No valid PE File", #MB_OK|#MB_ICONWARNING)
        UnmapViewOfFile_(MapFile)
        ProcedureReturn #False
    EndIf  
    *DOS_HEADER = MapFile
    NT_header = MapFile + *DOS_HEADER\e_lfanew    ; получаем адрес Nt Headers. По смещению Nt Headers + 24 - лежит поле Magic. В этом поле указана архитектура PE файла  
                                                  ; х32 или х64
    Select PeekW(NT_header + 24)
      Case #IMAGE_NT_OPTIONAL_HDR32_MAGIC                                  ; файл х32
        UnmapViewOfFile_(MapFile)
        ProcedureReturn 32
      Case #IMAGE_NT_OPTIONAL_HDR64_MAGIC                                  ; файл х64
        UnmapViewOfFile_(MapFile)
        ProcedureReturn 64
    EndSelect
 EndIf  
 ProcedureReturn #False  
EndProcedure  
 
Procedure OpenWindow_Main()
  If OpenWindow(#Main, 456, 223, 406, 198, "Section Add", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    TextGadget(#Text_6, 12, 12, 160, 20, "[File:]") : DisableGadget(#Text_6, 1)
    StringGadget(#String_File, 10, 35, 345, 20, DragDrop)
    SetGadgetColor(#String_File, #PB_Gadget_FrontColor, $a0a0a0)
    EnableWindowDrop(#Main, #PB_Drop_Files, #PB_Drag_Link)
    ButtonGadget(#btn_1, 360, 35, 35, 20, "...")
    StringGadget(#String_Name, 20, 85, 75, 20, "")
     SetGadgetAttribute(#String_Name, #PB_String_MaximumLength, 8)       ; Имя секции не более 8 символов
    CheckBoxGadget(#CheckBox_rnd, 240, 85, 120, 20, "Random name")
    StringGadget(#String_Size, 20, 110, 75, 20, "", #PB_String_Numeric | #PB_Text_Right)
    TextGadget(#Text_4, 115, 85, 105, 20, "Name section")
    TextGadget(#Text_5, 115, 112, 160, 20, "VirtualSize section")
    FrameGadget(#FrameGadget, 10, 62, 385, 80, "Options")
    ButtonGadget(#btn_0, 300, 157, 95, 25, "Add Section")
    HyperLinkGadget(#HyperLink, 15, 163, 50, 20, "About", $ff0000)
  EndIf
EndProcedure
 
OpenWindow_Main()
 
Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget And EventGadget() = #String_File
     Select EventType()
        Case #PB_EventType_Focus
          If GetGadgetText(#String_File) = DragDrop
             SetGadgetColor(#String_File, #PB_Gadget_FrontColor, -1)
             SetGadgetText(#String_File, "")
          EndIf
        Case #PB_EventType_LostFocus
          If GetGadgetText(#String_File) = ""
             SetGadgetColor(#String_File, #PB_Gadget_FrontColor, $a0a0a0)
             SetGadgetText(#String_File, DragDrop)
          EndIf
     EndSelect
  EndIf    
  Select Event
    Case#PB_Event_WindowDrop  
       If EventWindow() = #Main
         file = EventDropFiles()
           If LCase(GetExtensionPart(file)) = "exe" Or LCase(GetExtensionPart(file)) = "dll"
             Arch = MappingFile(file)
             If Arch
               SetGadgetText(#Text_6, "[File: x" + Str(Arch) + "]")
               SetGadgetColor(#String_File, #PB_Gadget_FrontColor, -1)
               SetGadgetText(#String_File, file)
             EndIf  
           Else
             MessageBeep_(#MB_ICONERROR)
           EndIf  
       EndIf  
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #String_File
      ElseIf EventGadget = #btn_1
        file = OpenFileRequester("Open PE file", "", "PE Files (exe, dll)|*.exe;*.dll|", 0)
        If file
          Arch = MappingFile(file)
          If Arch
            SetGadgetText(#Text_6, "[File: x" + Str(Arch) + "]")
            SetGadgetColor(#String_File, #PB_Gadget_FrontColor, -1)
            SetGadgetText(#String_File, file)
          EndIf  
        EndIf
      ElseIf EventGadget = #HyperLink
        MessageRequester("Section Add", "Tool for adding sections in Windows executable files x86 - x64" + Chr(10) + "                    created by crc1 copyright © 2015",
                         #MB_OK|#MB_ICONINFORMATION)
      ElseIf EventGadget = #btn_0
        If GetGadgetText(#String_File) <> DragDrop And GetGadgetText(#String_File)
          If GetGadgetText(#String_Size)
              Select Arch
                 Case 32
                    SectionAdd_32(file, Val(GetGadgetText(#String_Size)), GetGadgetText(#String_Name))
                 Case 64
                    SectionAdd_64(file, Val(GetGadgetText(#String_Size)), GetGadgetText(#String_Name))
              EndSelect  
          Else  
             MessageRequester("Ахтунг", "Virtual Size empty", #MB_OK|#MB_ICONWARNING)
             SetActiveGadget(#String_Size)
          EndIf  
        Else  
          MessageRequester("Ахтунг", "Don not select a file", #MB_OK|#MB_ICONWARNING)
        EndIf
      ElseIf EventGadget = #CheckBox_rnd
        If GetGadgetState(#CheckBox_rnd)
          s$ = ""
          For i = 1 To 6
            s$ + Chr(Random(122,97))
          Next i
          SetGadgetText(#String_Name, s$)
        Else
          SetGadgetText(#String_Name, "")
        EndIf  
      EndIf
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Main
        CloseWindow(#Main)
        Break
      EndIf
  EndSelect
ForEver
 
DataSection
  gmh:
 Data.b $65, $48, $8B, $04, $25, $30, $00, $00, $00, $48, $8B, $40, $60, $48, $8B, $40, $10
;   65 48 8B 04 25 30 00 00 00         | mov rax,qword ptr gs:[30]                 ; Т.к. OS может загрузить х64 образ в память по ImageBase отличной от  
;   48 8B 40 60                        | mov rax,qword ptr ds:[rax+60]             ; указанной в хидере файла, вычисляем фактический адрес загрузки модуля
;   48 8B 40 10                        | mov rax,qword ptr ds:[rax+10]             ; Это аналог API GetModuleHandle в х64 системе.
  gmhe:
EndDataSection  



PS
ВАЖНО!
Данный код работает только для EXE файлов. Для DLL секция добавляется, но файл становится не рабочим
Для DLL можно просто добавлять секцию, без изменения точки входа (AddressOfEntryPoint) Для этого нужно заремить две строки
Код:
1
2
3
         ;  OldEP = *NT_HEADERS\OptionalHeader\AddressOfEntryPoint   ; запоминаем старую EP
         ;  *NT_HEADERS\OptionalHeader\AddressOfEntryPoint = *NewSecEntry\VirtualAddress
 


_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Последний раз редактировалось pablov Вс окт 18, 2015 4:44 pm, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Вс окт 04, 2015 6:02 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
PE Constants

Выкладываю константы для PE файлов
PE Constants
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
; http://cs.usu.edu.ru/docs/pe/
; http://education.kulichki.net/comp/hack/27.htm
; http://www.cyberforum.ru/post3945127.html
; http://mzc.narod.ru/Creating/Step008.htm
 
;             Структура PE файла
;            
;     +------------------------------------+
;     |           MS DOS Header            |
;     |------------------------------------|
;     |   MS DOS Real-Mode Stub Programm   |
;     |------------------------------------|
;     |         PE File Signature          |
;     |------------------------------------|
;     |           PE File Header           |
;     |------------------------------------|
;     |      PE File Optional Header       |
;     |------------------------------------|
;     |       .text Section Header         |
;     |------------------------------------|
;     |        .bss Section Header         |
;     |------------------------------------|
;     |       .rdata Section Header        |
;     |------------------------------------|
;     |                  .                 |
;     |                  .                 |
;     |                  .                 |
;     |------------------------------------|
;     |       .Debug Section Header        |
;     |------------------------------------|
;     |           .text Section            |
;     |------------------------------------|
;     |           .bss Section             |
;     |------------------------------------|
;     |          .rdata Section            |
;     |------------------------------------|
;     |                  .                 |
;     |                  .                 |
;     |                  .                 |
;     |------------------------------------|
;     |          .Debug Section            |
;     +------------------------------------+
 
 
 
; Variables And Constants
 
; ===============================================================================================================================
;   IMAGE_FILE_HEADER\Machine
; ===============================================================================================================================
 
#IMAGE_FILE_MACHINE_UNKNOWN       = 0        ; неизвестный процессор
#IMAGE_FILE_MACHINE_I386            = $014C  ; Intel 80386 или выше
–                                 = $014D  ; Intel 80386 или выше
–                                 = $014E      ; Intel Pentium или выше
–                                 = $0160      ; MIPS R3000, big-endian
#IMAGE_FILE_MACHINE_R3000           = $0162      ; MIPS R3000, little-endian
#IMAGE_FILE_MACHINE_R4000           = $0166      ; MIPS R4000
#IMAGE_FILE_MACHINE_R10000    = $0168    ; MIPS R10000
#IMAGE_FILE_MACHINE_WCEMIPSV2 = $0169    ; MIPS WCE v2
#IMAGE_FILE_MACHINE_ALPHA           = $0184      ; DEC/Compaq Alpha AXP
#IMAGE_FILE_MACHINE_SH3       = $01A2    ; Hitachi SH3
#IMAGE_FILE_MACHINE_SH3DSP    = $01A3    ; Hitachi SH3 DSP
#IMAGE_FILE_MACHINE_SH3E      = $01A4    ; Hitachi SH3E
#IMAGE_FILE_MACHINE_SH4       = $01A6    ; Hitachi SH4
#IMAGE_FILE_MACHINE_SH5       = $01A8    ; Hitachi SH5
#IMAGE_FILE_MACHINE_ARM       = $01C0    ; ARM
#IMAGE_FILE_MACHINE_THUMB           = $01C2      ; ARM Thumb
#IMAGE_FILE_MACHINE_AM33            = $01D3      ; Panasonic AM33
#IMAGE_FILE_MACHINE_POWERPC       = $01F0        ; IBM PowerPC
#IMAGE_FILE_MACHINE_POWERPCFP   = $01F1  ; IBM PowerPC FP
#IMAGE_FILE_MACHINE_IA64            = $0200      ; Intel IA-64 (Itanium)
#IMAGE_FILE_MACHINE_MIPS16        = $0266        ; MIPS16
–                                 = $0268      ; Motorola 68000
#IMAGE_FILE_MACHINE_ALPHA64       = $0284        ; DEC/Compaq Alpha AXP 64-bit
–                                 = $0290      ; HP PA-RISC
#IMAGE_FILE_MACHINE_MIPSFPU       = $0366        ; MIPS With FPU
#IMAGE_FILE_MACHINE_MIPSFPU16   = $0466  ; MIPS16 With FPU
#IMAGE_FILE_MACHINE_TRICORE       = $0520        ; Infineon TriCore
#IMAGE_FILE_MACHINE_CEF       = $0CEF    ; ???
#IMAGE_FILE_MACHINE_EBC         = $0EBC  ; EFI Byte Code
#IMAGE_FILE_MACHINE_AMD64       = $8664  ; AMD 64 (K8)
#IMAGE_FILE_MACHINE_M32R        = $9041  ; Renesas M32R
#IMAGE_FILE_MACHINE_CEE       = $C0EE    ; ???
 
; ===============================================================================================================================
; $tagIMAGE_FILE_HEADER\Characteristics
; ===============================================================================================================================
 
#IMAGE_FILE_RELOCS_STRIPPED         = $0001  ; Relocation information was stripped from the file. The file must be loaded at its preferred base address. If the base address is not available, the loader reports an error.
#IMAGE_FILE_EXECUTABLE_IMAGE        = $0002  ; The file is executable (there are no unresolved external references).
#IMAGE_FILE_LINE_NUMS_STRIPPED      = $0004  ; COFF line numbers were stripped from the file.
#IMAGE_FILE_LOCAL_SYMS_STRIPPED     = $0008  ; COFF symbol table entries were stripped from file.
#IMAGE_FILE_AGGRESIVE_WS_TRIM       = $0010  ; Aggressively trim the working set. This value is obsolete.
#IMAGE_FILE_LARGE_ADDRESS_AWARE     = $0020  ; The application can handle addresses larger than 2 GB.
#IMAGE_FILE_BYTES_REVERSED_LO       = $0080  ; The bytes of the word are reversed. This flag is obsolete.
#IMAGE_FILE_32BIT_MACHINE           = $0100  ; The computer supports 32-bit words.
#IMAGE_FILE_DEBUG_STRIPPED          = $0200  ; Debugging information was removed and stored separately in another file.
#IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400  ; If the image is on removable media, copy it to and run it from the swap file.
#IMAGE_FILE_NET_RUN_FROM_SWAP       = $0800  ; If the image is on the network, copy it to and run it from the swap file.
#IMAGE_FILE_SYSTEM                  = $1000  ; The image is a system file.
#IMAGE_FILE_DLL                     = $2000  ; The image is a DLL file. While it is an executable file, it cannot be run directly.
#IMAGE_FILE_UP_SYSTEM_ONLY          = $4000  ; The file should be run only on a uniprocessor computer.
#IMAGE_FILE_BYTES_REVERSED_HI       = $8000  ; The bytes of the word are reversed. This flag is obsolete.
 
; ===============================================================================================================================
;  IMAGE_OPTIONAL_HEADER\Magic
; ===============================================================================================================================
 
#IMAGE_NT_OPTIONAL_HDR32_MAGIC = $10b ;  Файл является исполняемым образом. (32-битное приложение.)
#IMAGE_NT_OPTIONAL_HDR64_MAGIC = $20b ;  Файл является исполняемым образом. (64-битное приложение.)
#IMAGE_ROM_OPTIONAL_HDR_MAGIC  = $107 ;  Файл образа ПЗУ.
 
; ===============================================================================================================================
;  IMAGE_OPTIONAL_HEADER\Subsystem
; ===============================================================================================================================
 
#IMAGE_SUBSYSTEM_UNKNOWN                  = 0 ;  Не известная подсистема.
#IMAGE_SUBSYSTEM_NATIVE                   = 1 ;  Нет необходимости подсистемы.
#IMAGE_SUBSYSTEM_WINDOWS_GUI              = 2 ;  Windows, графический интерфейс пользователя (GUI) подсистемы.
#IMAGE_SUBSYSTEM_WINDOWS_CUI              = 3 ;  ОС Windows в текстовом режиме пользовательского интерфейса (АПИ) подсистемы.
#IMAGE_SUBSYSTEM_OS2_CUI                  = 5 ;  OS / 2 CUI подсистемы.
#IMAGE_SUBSYSTEM_POSIX_CUI                = 7 ;  CUI POSIX подсистемы.
#IMAGE_SUBSYSTEM_WINDOWS_CE_GUI           = 9 ;  Windows CE системы.
#IMAGE_SUBSYSTEM_EFI_APPLICATION          = 10 ;  Extensible Firmware Interface (EFI) приложения.
#IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER  = 11 ;  EFI загрузочный драйвер.
#IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER       = 12 ;  EFI драйвер службы.
#IMAGE_SUBSYSTEM_EFI_ROM                  = 13 ;  EFI ROM образ.
#IMAGE_SUBSYSTEM_XBOX                     = 14 ;  Xbox системы.
#IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16 ;  Загрузочное приложение.
 
; ===============================================================================================================================
;  IMAGE_OPTIONAL_HEADER\DllCharacteristics
; ===============================================================================================================================
 
#IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          = $0040 ;  Динамическая база.
#IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       = $0080 ;  Проверка целостности кода. Если установить этот флаг, то PointerToRawData должна быть ровна 0 (нулю)
#IMAGE_DLLCHARACTERISTICS_NX_COMPAT             = $0100 ;  Образ совместим с Data Execution Prevention (DEP).
#IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          = $0200 ;  Без изоляции.
#IMAGE_DLLCHARACTERISTICS_NO_SEH                = $0400 ;  Образ не использует структурную обработку (SEH).
#IMAGE_DLLCHARACTERISTICS_NO_BIND               = $0800 ;  Не связывать образ.
#IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            = $2000 ;  Драйвер WDM.
#IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000 ;  Терминальный сервер.
 
; ===============================================================================================================================
;  IMAGE_NT_HEADER\Signature
; ===============================================================================================================================
 
#IMAGE_DOS_SIGNATURE     = $5A4D         ;  MZ сигнатура.
#IMAGE_OS2_SIGNATURE     = $454E         ;  NE сигнатура.
#IMAGE_OS2_SIGNATURE_LE  = $454C         ;  LE сигнатура.
#IMAGE_NT_SIGNATURE      = $00004550     ;  PE00 сигнатура.
 
; ===============================================================================================================================
;  IMAGE_SECTION_HEADER\Characteristics
; ===============================================================================================================================
 
#IMAGE_SCN_CNT_CODE               = $00000020 ;  Секция содержит код.
#IMAGE_SCN_CNT_INITIALIZED_DATA   = $00000040 ;  Секция содержит инициализированные данные.
#IMAGE_SCN_CNT_UNINITIALIZED_DATA = $00000080 ;  Секция содержит неинициализированные данные.
#IMAGE_SCN_LNK_INFO               = $00000200 ;  Содержит комментарии или другие информации.
#IMAGE_SCN_LNK_REMOVE             = $00000800 ;  Секция не станет частью образа.
#IMAGE_SCN_LNK_COMDAT             = $00001000 ;  Секция содержет COMDAT данные.
#IMAGE_SCN_NO_DEFER_SPEC_EXC      = $00004000 ;  Сброс спекулятивной обработки исключений бит в TLB записях для данного раздела.
#IMAGE_SCN_GPREL                  = $00008000 ;  Секция содержит ссылки на данные через глобальный указатель.
#IMAGE_SCN_ALIGN_1BYTES           = $00100000 ;  Выравнивание данных на 1-байт.
#IMAGE_SCN_ALIGN_2BYTES           = $00200000 ;  Выравнивание данных на 2-байта.
#IMAGE_SCN_ALIGN_4BYTES           = $00300000 ;  Выравнивание данных на 4-байта.
#IMAGE_SCN_ALIGN_8BYTES           = $00400000 ;  Выравнивание данных на 8-байт.
#IMAGE_SCN_ALIGN_16BYTES          = $00500000 ;  Выравнивание данных на 16-байт.
#IMAGE_SCN_ALIGN_32BYTES          = $00600000 ;  Выравнивание данных на 32-байта.
#IMAGE_SCN_ALIGN_64BYTES          = $00700000 ;  Выравнивание данных на 64-байта.
#IMAGE_SCN_ALIGN_128BYTES         = $00800000 ;  Выравнивание данных на 128-байт.
#IMAGE_SCN_ALIGN_256BYTES         = $00900000 ;  Выравнивание данных на 256-байт.
#IMAGE_SCN_ALIGN_512BYTES         = $00A00000 ;  Выравнивание данных на 512-байт.
#IMAGE_SCN_ALIGN_1024BYTES        = $00B00000 ;  Выравнивание данных на 1024-байта.
#IMAGE_SCN_ALIGN_2048BYTES        = $00C00000 ;  Выравнивание данных на 2048-байт.
#IMAGE_SCN_ALIGN_4096BYTES        = $00D00000 ;  Выравнивание данных на 4096-байт.
#IMAGE_SCN_ALIGN_8192BYTES        = $00E00000 ;  Выравнивание данных на 8192-байта.
#IMAGE_SCN_LNK_NRELOC_OVFL        = $01000000 ;  Секция содержит расширенные поправки.
#IMAGE_SCN_MEM_DISCARDABLE        = $02000000 ;  Секция может быть игнорирована.
#IMAGE_SCN_MEM_NOT_CACHED         = $04000000 ;  Секция не кешируема.
#IMAGE_SCN_MEM_NOT_PAGED          = $08000000 ;  Секция не сбрасывается в страничный файл.
#IMAGE_SCN_MEM_SHARED             = $10000000 ;  Общая секция.
#IMAGE_SCN_MEM_EXECUTE            = $20000000 ;  Секция выполняемая.
#IMAGE_SCN_MEM_READ               = $40000000 ;  Секция для чтения.
#IMAGE_SCN_MEM_WRITE              = $80000000 ;  Секция для записи.
 
; ===============================================================================================================================
;  OptionalHeader\DataDirectory[16]
; ===============================================================================================================================
 
#IMAGE_DIRECTORY_ENTRY_EXPORT         = 0   ; Export Directory
#IMAGE_DIRECTORY_ENTRY_IMPORT         = 1   ; Import Directory
#IMAGE_DIRECTORY_ENTRY_RESOURCE       = 2   ; Resource Directory
#IMAGE_DIRECTORY_ENTRY_EXCEPTION      = 3   ; Exception Directory
#IMAGE_DIRECTORY_ENTRY_SECURITY       = 4   ; Security Directory
#IMAGE_DIRECTORY_ENTRY_BASERELOC      = 5   ; Base Relocation Table
#IMAGE_DIRECTORY_ENTRY_DEBUG          = 6   ; Debug Directory
;      IMAGE_DIRECTORY_ENTRY_COPYRIGHT       7   ; (X86 usage)
#IMAGE_DIRECTORY_ENTRY_ARCHITECTURE   = 7   ; Architecture Specific Data
#IMAGE_DIRECTORY_ENTRY_GLOBALPTR      = 8   ; RVA of GP
#IMAGE_DIRECTORY_ENTRY_TLS            = 9   ; TLS Directory
#IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    = 10   ; Load Configuration Directory
#IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT   = 11   ; Bound Import Directory in headers
#IMAGE_DIRECTORY_ENTRY_IAT            = 12   ; Import Address Table
#IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT   = 13   ; Delay Load Import Descriptors
#IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14   ; COM Runtime descriptor


_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Пн окт 05, 2015 5:07 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
На счет секций. Этот код должен добавлять секцию или только флаги у существующей менять?
Код:
1
Import "/section:.code, ERW" : EndImport



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Вт окт 06, 2015 6:27 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
MrF писал(а):
На счет секций. Этот код должен добавлять секцию или только флаги у существующей менять?
Код:
1
Import "/section:.code, ERW" : EndImport


Что это за код и откуда он? Почему он должен что-то добавлять\менять?

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Ср окт 07, 2015 4:01 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
pablov писал(а):
Что это за код и откуда он? Почему он должен что-то добавлять\менять?

Это опции polink.exe
Цитата:
Syntax:
POLINK [ { option | file | @commandfile } ... ]

Options:
/ALIGN:#
/ALLOWBIND[:NO]
/ALLOWISOLATION[:NO]
/ALTERNATENAME:symbol=symbol
/BASE:address
/DEBUG[:NO]
/DEBUGTYPE:{CV|COFF|BOTH}
/DEF:filename
/DEFAULTLIB:filename
/DELAY:{NOBIND|UNLOAD}
/DELAYLOAD:filename
/DLL
/DRIVER[:{UPONLY|WDM}]
/ENTRY:symbol
/EXPORT:symbol[=[module.]symbol][,@ordinal[,NONAME]][,DATA]
/FIXED[:NO]
/FORCE:MULTIPLE
/HEAP:reserve[,commit]
/IMPLIB:filename
/INCLUDE:symbol
/LARGEADDRESSAWARE[:NO]
/LIBPATH:path
/MACHINE:{AMD64|ARM|X64|X86}
/MANIFEST[:NO]
/MANIFESTDEPENDENCY:dependency
/MANIFESTFILE:filename
/MAP[:filename]
/MAPINFO:{EXPORTS|FIXUPS|LINES}
/MERGE:from=to
/NODEFAULTLIB
/NOENTRY
/NXCOMPAT[:NO]
/OPT:{REF|NOREF|WIN98|NOWIN98}
/OSVERSION:#[.##]
/OUT:filename
/RELEASE
/SAFESEH[:NO]
/SECTION:name,[E][R][W][S][D][K][P]
/STACK:reserve[,commit]
/STUB:filename
/SUBSYSTEM:{CONSOLE|NATIVE|WINDOWS|WINDOWSCE}[,#[.##]]
/SWAPRUN:{CD|NET}
/TSAWARE[:NO]
/VERBOSE
/VERSION:#[.##]
/WS:AGGRESSIVE

Похоже, он только флаги у секции меняет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Ср окт 07, 2015 9:36 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Цитата:
Похоже, он только флаги у секции меняет.

Интересно, каким образом?

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Чт ноя 05, 2015 11:33 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Полнейшая спецификация от MicroSoft PE формата
Microsoft Portable Executable and Common Object File Format (COFF) Specification
Revision 8.3 – February 6, 2013

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Вт ноя 17, 2015 9:51 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Дизассемблер длин инструкций х32 Catchy 32
Размещаю здесь, чтоб не потерялся
OpcodeLen
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
 ;Дизассемблер длин инструкций создан для дизассемблирования длин инструкций 32х битного исполняемого кода процессоров x86. 
 ;The disassembler of lengths of instructions 32х a bit executed code of x86 processors.
 ;3DNOW-Supported
 ;SSE-Supported
 ;SSE2-Supported
 ;MMX-Supported
 
#pref66h = 1
#pref67h = 2
 
Procedure OpcodeLen(pointer.l)
EnableASM
mov esi, pointer            ;the pointer on the instruction
 
pushad
        call    c_Delta
 
;------------Delta-offset calculation-------------
!c_Delta:
        pop     ebp
        sub     ebp,  c_Delta
        XOr     ecx,  ecx
       
;----Flags extraction, checks for some opcodes----
!c_ExtFlags:
        XOr     eax,  eax
        XOr     ebx,  ebx
        cdq
        lodsb                                         ;al <- opcode
        mov     cl, al                          ;cl <- opcode
        cmp     al,   0fh                                 ;Test on prefix 0Fh
        je      c_ExtdTable            
        cmp     word  [esi-1], 20CDh    ;Test on VXD call
        jne     c_NormTable
        inc     esi                                   ;If VXD call (int 20h), then command length is 6 bytes
        lodsd
        jmp     c_CalcLen
 
!c_ExtdTable:                                   ;Load flags from extended table
        lodsb
        inc     ah                                  ;EAX=al+100h (100h/2 - lenght first table)
 
!c_NormTable:                                   ;Load flags from normal table
        shr     eax, 1                          ;Elements tables on 4 bits
        mov     al, byte [c_Table+eax]
 
!c_CheckC1:    
        jc      c_IFC1
        shr     eax, 4                            ;Get high 4-bits block if offset is odd, otherwise...
 
!c_IFC1:
        And     eax, 0Fh                              ;...low
        xchg    eax, ebx                              ;EAX will be needed for other purposes
 
;--------------Opcode type checking---------------
!c_CheckFlags:
        cmp     bl, 0Eh                         ;Test on ErrorFlag
        je      c_Error
        cmp     bl, 0Fh                         ;Test on PrefixFlag
        je      c_Prefix
        Or      ebx, ebx                                ;One byte command  
        jz      c_CalcLen                  
        btr     ebx, 0                            ;Command with ModRM byte
        jc      c_ModRM
        btr     ebx, 1                          ;Test on imm8,rel8 etc flag
        jc      c_incr1
        btr     ebx, 2                            ;Test on ptr16 etc flag
        jc      c_incr2
 
;-----imm16/32,rel16/32, etc types processing-----
!c_16_32:
        And     bl, 11110111b                   ;Reset 16/32 sign
 
        cmp     cl, 0A0h                              ;Processing group 0A0h-0A3h
        jb      c_Check66h
        cmp     cl, 0A3h
        ja      c_Check66h
        test    ch, #pref67h
        jnz     c_incr2
        jmp     c_incr4
               
!c_Check66h:                                    ;Processing other groups
        test   ch, #pref66h                    
        jz      c_incr4                            
        jmp     c_incr2                            
 
;---------------Prefixes processing---------------
!c_Prefix:
        cmp     cl, 66h
        je      c_SetFlag66h
        cmp     cl, 67h
        jne     c_ExtFlags
 
!c_SetFlag67h:
        Or      ch, #pref67h
        jmp     c_ExtFlags
 
!c_SetFlag66h:
        Or      ch, #pref66h
        jmp     c_ExtFlags
 
;--------------ModR/M byte processing-------------
!c_ModRM:
        lodsb
 
!c_Check_0F6h_0F7h:                               ;Check on 0F6h and 0F7h groups
        cmp     cl, 0F7h
        je      c_GroupF6F7
        cmp     cl, 0F6h
        jne     c_ModXX                
       
!c_GroupF6F7:                                   ;Processing groups 0F6h and 0F7h
        test   al, 00111000b  
        jnz     c_ModXX
        test   cl, 00000001b
        jz      c_incbt1                       
        test    ch, 1
        jnz     c_incbt2       
        inc     esi
        inc     esi
!c_incbt2:
        inc     esi
!c_incbt1:
        inc     esi
 
!c_ModXX:                                                 ;Processing MOD bits
        mov     edx, eax
        And     al, 00000111b               ;al <- only R/M bits
        test    dl, 11000000b               ;Check MOD bits
        jz      c_Mod00
        jp      c_CheckFlags                ;Or c_Mod11
        js      c_Mod10
       
!c_Mod01:
        test   ch, #pref67h
        jnz     c_incr1                               ;16-bit addressing
        cmp     al, 4                             ;Check SIB
        je      c_incr2
        jmp     c_incr1
 
!c_Mod00:
        test   ch, #pref67h
        jz      c_Mod00_32                      ;32-bit addressing
        cmp     al, 6
        je      c_incr2
        jmp     c_CheckFlags   
!c_Mod00_32:
        cmp     al, 4                             ;Check SIB
        jne     c_disp32
 
!c_SIB:                                             ;Processing SIB byte
        lodsb
        And     al, 00000111b
        cmp     al, 5
        je      c_incr4
        jmp     c_CheckFlags   
 
!c_disp32:     
        cmp     al, 5
        je      c_incr4
        jmp     c_CheckFlags
 
!c_Mod10:
        test   ch, #pref67h
        jnz     c_incr2                   ;16-bit addressing
        cmp     al, 4                             ;Check SIB
        je      c_incr5
        jmp     c_incr4
 
!c_incr5:      
        inc     esi
!c_incr4:      
        inc     esi
        inc     esi
!c_incr2:       inc     esi
!c_incr1:       inc     esi
        jmp     c_CheckFlags   
 
;-----------Command length calculation------------
!c_CalcLen:
        sub     esi, [esp+4*1]
        cmp     esi, 15
        ja      c_Error
        mov     [esp+4*7], esi
        jmp     c_Exit
 
;----------------Setting the error----------------
!c_Error:
        XOr     eax, eax
        dec     eax
        mov     [esp+4*7], eax 
 
;---------Restore the registers and exit----------
!c_Exit:
        popad
        ;-------------------------------------------------
        DisableASM     
        ProcedureReturn
       
EndProcedure   
       
 
Define *p, str$, n.b
 
 
*p = ?c_test  ;
 
While *p < ?c_testend
   n = OpcodeLen(*p)
   str$ = str$ + "Lengths of instructions " + Str(n) + " byte" + Chr(10)
   *p + n
Wend
   MessageRequester("", str$)
 
DataSection
 
;================NORMAL OPCODES================
!c_Table:
;    01  23    45   67   89   AB   CD   EF
!db 011h,011h,028h,000h,011h,011h,028h,000h;0Fh
!db 011h,011h,028h,000h,011h,011h,028h,000h;1Fh
!db 011h,011h,028h,0F0h,011h,011h,028h,0F0h;2Fh
!db 011h,011h,028h,0F0h,011h,011h,028h,0F0h;3Fh
!db 000h,000h,000h,000h,000h,000h,000h,000h;4Fh
!db 000h,000h,000h,000h,000h,000h,000h,000h;5Fh
!db 000h,011h,0FFh,0FFh,089h,023h,000h,000h;6Fh
!db 022h,022h,022h,022h,022h,022h,022h,022h;7Fh
!db 039h,033h,011h,011h,011h,011h,011h,011h;8Fh
!db 000h,000h,000h,000h,000h,0C0h,000h,000h;9Fh
!db 088h,088h,000h,000h,028h,000h,000h,000h;AFh
!db 022h,022h,022h,022h,088h,088h,088h,088h;BFh
!db 033h,040h,011h,039h,060h,040h,002h,000h;CFh
!db 011h,011h,022h,000h,011h,011h,011h,011h;DFh
!db 022h,022h,022h,022h,088h,0C2h,000h,000h;EFh
!db 0F0h,0FFh,000h,011h,000h,000h,000h,011h;FFh
;==============================================
;===============EXTENDED OPCODES===============
!c_TableEXT:
;    01  23    45   67   89   AB   CD   EF
!db 011h,011h,0E0h,000h,000h,0EEh,0E1h,003h;0Fh
!db 011h,011h,011h,011h,01Eh,0EEh,0EEh,0EEh;1Fh
!db 011h,011h,01Eh,01Eh,011h,011h,011h,011h;2Fh
!db 000h,000h,000h,0EEh,0EEh,0EEh,0EEh,0EEh;3Fh
!db 011h,011h,011h,011h,011h,011h,011h,011h;4Fh
!db 011h,011h,011h,011h,011h,011h,011h,011h;5Fh
!db 011h,011h,011h,011h,011h,011h,011h,011h;6Fh
!db 033h,033h,011h,010h,011h,011h,011h,011h;7Fh
!db 088h,088h,088h,088h,088h,088h,088h,088h;8Fh
!db 011h,011h,011h,011h,011h,011h,011h,011h;9Fh
!db 000h,001h,031h,011h,000h,001h,031h,011h;AFh
!db 011h,011h,011h,011h,0EEh,031h,011h,011h;BFh
!db 011h,031h,033h,031h,000h,000h,000h,000h;CFh
!db 0E1h,011h,011h,011h,011h,011h,011h,011h;DFh
!db 011h,011h,011h,011h,011h,011h,011h,011h;EFh
!db 0E1h,011h,011h,011h,011h,011h,011h,01Eh;FFh
;==============================================
 
c_test:
        Data.b $08B, $54,  $024, $10                                    ; MOV EDX,DWORD PTR SS:[ESP+10]               4
        Data.b $0C7, $04, $25, $0EC, $31, $40, $00, $1C, $0A8, $5D, $04 ; mov dword ptr ds:[4031EC], 45DA81C          11
        Data.b $66,  $81,  $7E,  $0FF, $0CD, $20                        ; CMP WORD PTR DS:[ESI-1],20CD                6
        Data.b $81,  $0ED, $54,  $10,  $40,  $00                        ; SUB EBP,00401054                            6
        Data.b $0F6, $0C5, $02                                          ; TEST CH,02                                  3
        Data.b $63,  $6F,  $75                                          ; ARPL WORD PTR DS:[EDI+75],BP                3
        Data.b $0F2, $8E,  $0A1, $09,  $15,  $0E4, $00                  ; REPNE MOV FS,DWORD PTR DS:[ECX+0E41509]     7
        Data.b $0F,  $68,  $64,  $60,  $21                              ; PUNPCKHBW MM4,QWORD PTR DS:[EAX+21]         5  
        Data.b $40,  $41                                                ; INC EAX; INC ECX                            1
        Data.b $74,  $18                                                ; JE $ + 18h                                  2
        Data.b $0F3, $0F, $7E, $00                                      ; MOVQ XMM0,QWORD PTR DS:[EAX]                4            
  Data.b $66,  $0F, $64, $0CC                                     ; PCMPGTB XMM1,XMM4                           4
c_testend:
EndDataSection



Ну и заодно Hacker Disassembler Engine 32 C от Вячеслава Патькова. К сожалению проект заброшен. Есть исходники Hacker Disassembler Engine х32-х64 на сях. Кто бы скомпилил в статическую либу.
Kvitaliy, может попробуешь. Сорцы тут
HDE 32 C
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
;  https://github.com/AmrThabet/x86Emulator/blob/master/hde28c/hde32.h
;  http://read.pudn.com/downloads154/sourcecode/windows/678822/hde32.c__.htm      - исходник библиотеки
;  * Hacker Disassembler Engine 32 C
;  * Copyright (c) 2008, Veacheslav Patkov
;  * aLL rights reserved.
 
; #F_MODRM         = $00000001
; #F_SIB           = $00000002
; #F_IMM8          = $00000004
; #F_IMM16         = $00000008
; #F_IMM32         = $00000010
; #F_DISP8         = $00000020
; #F_DISP16        = $00000040
; #F_DISP32        = $00000080
; #F_RELATIVE      = $00000100
; #F_2IMM16        = $00000800
; #F_ERROR         = $00001000
; #F_ERROR_OPCODE  = $00002000
; #F_ERROR_LENGTH  = $00004000
; #F_ERROR_LOCK    = $00008000
; #F_ERROR_OPERAND = $00010000
; #F_PREFIX_REPNZ  = $01000000
; #F_PREFIX_REPX   = $02000000
; #F_PREFIX_REP    = $03000000
; #F_PREFIX_66     = $04000000
; #F_PREFIX_67     = $08000000
; #F_PREFIX_LOCK   = $10000000
; #F_PREFIX_SEG    = $20000000
; #F_PREFIX_ANY    = $3f000000
;
; #PREFIX_SEGMENT_CS   = $02e
; #PREFIX_SEGMENT_SS   = $036
; #PREFIX_SEGMENT_DS   = $03e
; #PREFIX_SEGMENT_ES   = $026
; #PREFIX_SEGMENT_FS   = $064
; #PREFIX_SEGMENT_GS   = $065
; #PREFIX_LOCK         = $0f0
; #PREFIX_REPNZ        = $0f2
; #PREFIX_REPX         = $0f3
; #PREFIX_OPERAND_SIZE = $066
; #PREFIX_ADDRESS_SIZE = $067
EnableExplicit
 
Structure hde32s
  len.b;           длина инструкции
  p_rep.b;         префикс rep/repz (F3) или repnz (F2)
  p_lock.b;        префикс lock: F0
  p_seg.b;         сегментный префикс: 26, 2E, 36, 3E, 64, 65
  p_66.b;          префикс переопределения размера операнда: 66
  p_67.b;          префикс переопределения размера адреса: 67
  opcode.c;        опкод
  opcode2.b;       второй опкод (если первый 0F)
  modrm.b;         ModR/M
  modrm_mod.b;     ModR/M.mod
  modrm_reg.b;     ModR/M.reg
  modrm_rm.b;      ModR/M.r/m
  sib.s;           SIB
  sib_scale.b;     SIB.scale
  sib_index.b;     SIB.index
  sib_base.b ;     SIB.base
  StructureUnion  ; imm
    imm8.b;         непосредственное значение imm8
    imm16.w;        непосредственное значение imm16
    imm32.l;        непосредственное значение imm32
  EndStructureUnion
  StructureUnion  ; disp
    disp8.b;         смещение disp8
    disp16.w;        смещение disp16
    disp32.l;        смещение disp32
  EndStructureUnion
  flags.l;         флаги
EndStructure
 
 
Define hs.hde32s
Define *p, str$, n.b
 
Import "hde32.lib"
   hde32_disasm(a.i, b.i)
EndImport
 
  *p = ?c_test  
 
  While *p < ?c_testend
     n = hde32_disasm(*p, @hs)
     str$ = str$ + "Длинна инструкции " + Str(n) + " байт" + Chr(10)
     *p + n
  Wend
   MessageRequester("", str$)
 
DataSection
c_test:
        Data.b $08B, $54,  $024, $10                                    ; MOV EDX,DWORD PTR SS:[ESP+10]               4
        Data.b $0C7, $04, $25, $0EC, $31, $40, $00, $1C, $0A8, $5D, $04 ; mov dword ptr ds:[4031EC], 45DA81C          11
        Data.b $66,  $81,  $7E,  $0FF, $0CD, $20                        ; CMP WORD PTR DS:[ESI-1],20CD                6
        Data.b $81,  $0ED, $54,  $10,  $40,  $00                        ; SUB EBP,00401054                            6
        Data.b $0F6, $0C5, $02                                          ; TEST CH,02                                  3
        Data.b $63,  $6F,  $75                                          ; ARPL WORD PTR DS:[EDI+75],BP                3
        Data.b $0F2, $8E,  $0A1, $09,  $15,  $0E4, $00                  ; REPNE MOV FS,DWORD PTR DS:[ECX+0E41509]     7
        Data.b $0F,  $68,  $64,  $60,  $21                              ; PUNPCKHBW MM4,QWORD PTR DS:[EAX+21]         5  
        Data.b $40,  $41                                                ; INC EAX; INC ECX                            1
        Data.b $74,  $18                                                ; JE $ + 18h                                  2
        Data.b $0F3, $0F, $7E, $00                                      ; MOVQ XMM0,QWORD PTR DS:[EAX]                4            
  Data.b $66,  $0F, $64, $0CC                                     ; PCMPGTB XMM1,XMM4                           4
c_testend:
EndDataSection



Вложения:
Комментарий к файлу: Библиотека к Hacker Disassembler Engine 32 C
hde32.rar [970 байт]
Скачиваний: 110

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Portable Executable формат
СообщениеДобавлено: Ср ноя 18, 2015 12:06 am 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
исходники взял тут:
https://forum.tuts4you.com/topic/9426-h ... urce-code/
в ваших чего-то не хватает..
В папке "src" все скомпиленные либы. Компилятся в PellesC без вопросов и допиливаний. Полагаю, что они для х86. Для х64 надо компилить в PellesC_64х? Или это касается только exe_шников?


Вложения:
hde6404c+hde.0.03.rar [51.75 KiB]
Скачиваний: 117
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB