Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отладка консольной программы 
:(
    Опции темы
i_SweP
Дата 21.7.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



Пытаюсь задебажить свою пробную прогу через OllyDebugger
Если попробовать её открыть, то говорит "unable to open or read", попробовал attach'иться, программа просто выполняется некоторое количество шагов, потом достигает до ret и всё.. До ввода данных дело почему-то не доходит. 
Как всё-таки добиться отладки ?

p.s. компилил через NASM, GCC
PM MAIL   Вверх
airyashov
Дата 22.7.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Скорее всего, Вы пытаетесь открыть программу под DOS написанную.


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
i_SweP
Дата 22.7.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



И чем мне её препарировать ?
PM MAIL   Вверх
airyashov
Дата 23.7.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



выложите программу, посмотрим, либо какой-либо пример

Это сообщение отредактировал(а) airyashov - 23.7.2008, 09:39


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
i_SweP
Дата 23.7.2008, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 23.6.2007

Репутация: нет
Всего: нет



Код

;---------------------------------------------------------------
%include "asm_io.inc"
;---------------------------------------------------------------
segment .data
    limitInputMsg    db    "Enter limit ", 0
    okMsg            db    "OK", 0
;---------------------------------------------------------------
segment .bss
    limit    resd    1    ; unsinged int limit;    
;---------------------------------------------------------------
segment .text
    global    _asm_main
_asm_main:
    enter        0, 0
    pusha
    
    mov        eax, limitInputMsg
    call        print_string
    call        read_int
    mov        [limit], eax
    
;    for(int i = 1; i <= limit; i++)
;    {
;        if(IsPrime(i))    cout << i << endl;
;    }
    
;    mov        ebx, 1
    xor        ebx, ebx
    inc        ebx            ; int i = 1
loop_start:
;    call        showOK
    push        ebx
    call        IsPrime
    add        esp, 4
    
    test        eax, eax    ; compare eax with 0
    jz        next_step    ; if(eax == 0) jmp nextStep    
    call        print_int
    call        print_nl
    
    next_step:
    inc        ebx
    cmp        ebx, [limit]
    jbe        loop_start
; end of the loop
    
    popa
    mov        eax, 0
    leave
    ret
;---------------------------------------------------------------
; IsPrime - функция, результат в EAX, 1 если переданное в стек значение - простое число
IsPrime:
;    for(int i = 2; i <= (parameter / 2); i++)
;    {
;        if(parameter % i == 1) return 0;
;    }
;    return 1;
;

    push        dword 2            ; int i = 2
    mov        ecx, [esp + 8]    ; ecx = parameter 
    shr        ecx, 1            ; ecx /= 2
    
IsPrime_loop_start:

    mov        eax, [esp + 8]    ; eax = parameter
;    xor        edx, edx        ; edx = 0 - before division
    cdq
    div        dword [esp]        ; eax /= i
    test        edx, edx        ; if(edx == 0) jmp IsPrime_next_step
    jz        IsPrime_next_step
    
    call        showOK                                    ; debug
    
    ; here return 1
    add        esp, 4            ; "delete" i
    mov        eax, 1            ; returned value = 1
    ret
        
    IsPrime_next_step:
    
    inc        dword [esp]        ; i++    
    cmp        [esp], ecx        ; cmp i, parameter / 2    
    jb        IsPrime_loop_start
    
    xor        eax, eax
    ret
;---------------------------------------------------------------
; for debug
showOK:
    push        eax
    mov        eax, okMsg
    call        print_string
    call        print_nl
    pop        eax
    ret
;---------------------------------------------------------------




Прога выводит все простые числа от 1 до limit
Комментил, как мог (ещё при написании)
К сожалению, табуляция на форуме какая-то кривая

Если ввести 20, то выводится 
ОК
1
Exiting due to signal SIGSEGV  и т.д.



Это сообщение отредактировал(а) i_SweP - 23.7.2008, 16:37

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  PrimeNumbers.zip 39,76 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.