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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2012, 17:51   #1
TLabel
Пользователь
 
Аватар для TLabel
 
Регистрация: 02.01.2011
Сообщений: 30
Вопрос Не работает программа

Здравствуйте
Я вот попытался проверить одну вещь на ассемблере.
Дело в том что я зобрался "изменить" код программы во время ее работы.
Код:
.386                                  
.model flat,stdcall                    
option casemap:none                    

include     \masm32\include\windows.inc
include     \masm32\include\user32.inc
include     \masm32\include\kernel32.inc
includelib  \masm32\lib\user32.lib
includelib  \masm32\lib\kernel32.lib

.data   
msg db "Message", 0   ;сообщение
cpt db "caption", 0                    
                                                                            
.code                                  
start:

mov ax, 9090h             ; 2 nop
mov esp, offset tlabel    
push ax                      ;затераем   jmp ending
jmp ending                  ;это не должно выполнятся
tlabel:
invoke MessageBox, 0, addr msg, addr cpt, 48  ;  должно выскачить сообщение
ending:
invoke ExitProcess, 0   ;
end start
У меня ничего не присходит при старте программы. Значит jmp ending всетаки выполняется. Подзкажите, что делать.
спасибо
TLabel вне форума Ответить с цитированием
Старый 15.07.2012, 18:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
;это не должно выполнятся
А почему ты считаешь что безусловный переход не должен выполняться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.07.2012, 19:20   #3
TLabel
Пользователь
 
Аватар для TLabel
 
Регистрация: 02.01.2011
Сообщений: 30
По умолчанию

он не должен выполняться чтобы комманда "invoke MessageBox, 0, addr msg, addr cpt, 48" выполнелось.

при вызове комманды "push ax" esp уменьшается на 2 и указывает на комманду
jmp ending, и потом туда записывается значение 9090h.
Это значить, что вместо jmp ending выполнутся 2 nop и сообщение покажется
TLabel вне форума Ответить с цитированием
Старый 15.07.2012, 19:58   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хм, а часто секция кода доступна на запись?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.07.2012, 20:33   #5
TLabel
Пользователь
 
Аватар для TLabel
 
Регистрация: 02.01.2011
Сообщений: 30
По умолчанию

Я читал Рассылку Калашникова.
Там было написено это:
Цитата:

Даю голову на отсечение, что ни один язык высоко уровня не позволяет сделать того, что может наша программа:

(1) CSEG segment

(2) assume cs:CSEG, es:CSEG, ds:CSEG, ss:CSEG

(3) org 100h

(4) Begin:

(5) mov sp,offset Lab_1

(6) mov ax,9090h

(7) push ax

(8) int 20h

(9) Lab_1:

(10) mov ah,9

(11) mov dx,offset Mess

(12) int 21h

(13) int 20h

(14) Mess db 'А все-таки она выводится!$'

(15) CSEG ends

(16) end Begin

То, что вы видите - обман зрения. На первый взгляд, программа что-то делает с регистром SP, а затем выходит. Строки (9) - (12) вообще не будут работать. Но это глубокое заблуждение!
Значит и моя программа должна работать, но она не работает...
TLabel вне форума Ответить с цитированием
Старый 15.07.2012, 20:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Начнем с того что это не для винды программа )
Цитата:
int 20h
Если я правильно понял эту программу, то она просто делает подмену указателя для ret, на выход. Ты в стек помещаешь указатель на Lab_1, и int 20h благополучно перескакивает по нему. Но это ДОС.
I'm learning to live...

Последний раз редактировалось Stilet; 15.07.2012 в 21:04.
Stilet вне форума Ответить с цитированием
Старый 15.07.2012, 21:11   #7
TLabel
Пользователь
 
Аватар для TLabel
 
Регистрация: 02.01.2011
Сообщений: 30
По умолчанию

Для виндовс не как зделать токую программу?
TLabel вне форума Ответить с цитированием
Старый 15.07.2012, 21:38   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как. Но твоему антивирусу это не понравится )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.07.2012, 22:07   #9
TLabel
Пользователь
 
Аватар для TLabel
 
Регистрация: 02.01.2011
Сообщений: 30
По умолчанию

Почему? Программа веть может менять свой собственный код так, чтобы Antivirus этого не заметил.
Я же не пытаюсь изменить код чюжых программ.
Дайте ка пример программы, которая меняет свой код. (Это в цели обучение)
TLabel вне форума Ответить с цитированием
Старый 15.07.2012, 22:12   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему?
Потому что:
Цитата:
Программа веть может менять свой собственный код так, чтобы Antivirus этого не заметил.
Цитата:
Я же не пытаюсь изменить код чюжых программ.
И кто тебе поверит после такого? Все вы сейчас паиньки, а потом ботнеты нарожаете как кролики.
Цитата:
Это в цели обучение
Читай книги о низкоуровневом программировании. Может хоть что-то доброе в твоем воспаленном мозгу поселится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа работает в WinXP и не работает в Win7 blblbl-org Общие вопросы Delphi 4 23.04.2012 19:50
Программа работает пошагово, но не работает при запуске -Katerina- Microsoft Office Excel 3 12.07.2011 03:40
C++: не работает программа xNеo Помощь студентам 2 03.06.2011 20:44
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56