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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2007, 15:03   #1
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию Узнать адрес ошибки

Возможно такие темы уже были. Сразу извиняюсь.
Я не силен в ВинАпи пока только учусь и не стал писать бы этот пост если бы не острая необходимость.

Помогите со следующим кодом если возможно

1) Запускается процесс, в ходе его работы происходит ошибка и появляется окно об ошибке. Как узнать: а) адрес по которому произошла ошибка (если это динамтческий адрес, как узнать какой частью кода он был создан); б) поместить текст окна с ошибкой в переменную для дальнейшей работы с ней?

2) Узнать работает ли данный процесс с определенным файлом и если да то на каком участке кода происходит обращение к файлу и что он считывает из этого файла?

Заранее спасибо. Сильно не ругайте, если в чем-то не прав
Д'якон вне форума Ответить с цитированием
Старый 05.12.2007, 19:36   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

для этих целей существуют отладчики!
или надо написать программу для всего этого? чтобы всё это делала сама программа?

2. обращение к файлу может происходить на нескольких участках, и обычно этих участков очень много. на языке выского уровня это может быть всего 2-3 строки, а на ассемблере это может быть очень много строк....

Последний раз редактировалось rpy3uH; 05.12.2007 в 19:39.
rpy3uH вне форума Ответить с цитированием
Старый 05.12.2007, 20:00   #3
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Как при помощи отладчика узнать по какому адресу произошла ошибка в процессе. Хотя бы в двух словах. Ida - это отладчик?

2. Как определить хотя бы первое обращение к файлу. Как оно прописывается в асме?

Последний раз редактировалось rpy3uH; 05.12.2007 в 20:04.
Д'якон вне форума Ответить с цитированием
Старый 05.12.2007, 20:07   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Д'якон Посмотреть сообщение
Как при помощи отладчика узнать по какому адресу произошла ошибка в процессе. Хотя бы в двух словах. Ida - это отладчик?
отладчик останавливается на той инструкции которая вызвала ошибку.
IDA - это вроде не отладчик, это дизассемблер.
OllyDebug - самый лучший отладчик.

Цитата:
Сообщение от Д'якон Посмотреть сообщение
2. Как определить хотя бы первое обращение к файлу. Как оно прописывается в асме?
происходит вызов функции CreateFile.
Код:
push
push
.....
push
call CreateFile
rpy3uH вне форума Ответить с цитированием
Старый 05.12.2007, 20:23   #5
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

В коде есть проверка на отладчик - это не простой код

Какие апи юзаются для проверки проца винды имени пользователя и т.п.

И все же как программно узнать адрес ошибки?

Последний раз редактировалось rpy3uH; 05.12.2007 в 20:38.
Д'якон вне форума Ответить с цитированием
Старый 05.12.2007, 21:03   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Д'якон Посмотреть сообщение
Какие апи юзаются для проверки проца винды имени пользователя и т.п.
их много, например:
GetVersionEx - получение версии винды
GetUserName- получение имени пользователя

Цитата:
Сообщение от Д'якон Посмотреть сообщение
И все же как программно узнать адрес ошибки?
можно например внедриться в этот процесс и поставить свой обработчик в начало цепочки обработчиков SEH, и в любом случае при любом исключении вызовется твой обработчик

пример установки своего ообработчика в начало цепочки обработчиков в СВОЁМ процессе.

Код:
format PE GUI 4.0		      
 
entry start

 include 'win32a.inc'

section '.code' code readable writeable executable

 szTitle	db	"Structured Exception Handler [SEH]",0
 szMessage	db	"VOT NASH SOBSTVENNIY OBRABOTCHIK ISKLUCHENIY ",0


 start:
	push	exception_handler

	push	dword [fs:0000h]
	mov	dword [fs:0000h],esp
	jmp	setupSEH
	
 exception_handler:
	mov	esp,[esp+8]			; Помещаем смещ. ориг. SEH
						; Ошибка дает нам старый ESP
						; в [ESP+8]

	pop	dword [fs:0000h]	    ; Восст. старый SEH-обработчик

	stdcall [MessageBox],0, szTitle, szMessage,0			;

	push	00h
	call	[ExitProcess]			  ; Выходим из приложения

 setupSEH:
	xor	eax,eax 			; Генерируется исключение!!!!!!!!!!!!!!!!
	mov	 eax, eax

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
	  user,'USER32.DLL'
	  
  import kernel,\
	 ExitProcess,'ExitProcess'

  import user,\
	 MessageBox,'MessageBoxA'
rpy3uH вне форума Ответить с цитированием
Старый 05.12.2007, 22:12   #7
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Спасибо. Последний вопрос как узнать материнку и имя проца?
Д'якон вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(HTML или JS) Узнать IP адрес Air Помощь студентам 14 11.07.2008 10:12
Delphi 7 Как программно узнать мак-адрес? ratttx Свободное общение 3 15.04.2008 08:47
Как узнать с какого по какой адрес занимает процесс в системе. kalexi Win Api 2 30.03.2008 15:48
Как узнать IP адрес? AidarBik Работа с сетью в Delphi 2 11.07.2007 12:37
как узнать ip адрес зная mac адрес Roman Работа с сетью в Delphi 9 25.06.2007 12:39