SEH + ThreadContext

Вопросы по языку Паскаль и RAD-системе Delphi.
Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

SEH + ThreadContext

Сообщение Twister » 20.09.2007 (Чт) 10:29

Устанавливаю SEH-обработчик потоку. В нем хочу просто посмотреть состояние регистров на момент возникновения ошибки.
Но вместо валидной инфы вижу порнуху (в обоих случаях получения контекста - см. код). Подскажите, где ошибся (хотя есть подозрения, что дело, все-таки, в самостоятельности Делфей):
Код: Выделить всё
function _handler(Exception: PExceptionRecord; EstablisherFrame: DWORD; Context: PContext; DispContext: DWORD): DWORD; cdecl;
var
  c: _CONTEXT;
begin
ShowMessage('EDI: ' + IntToHex(Context.Edi, 8) + #13#10 +
            'ESI: ' + IntToHex(Context.Esi, 8) + #13#10 +
            'EBX: ' + IntToHex(Context.Ebx, 8) + #13#10 +
            'EDX: ' + IntToHex(Context.Edx, 8) + #13#10 +
            'ECX: ' + IntToHex(Context.Ecx, 8) + #13#10 +
            'EAX: ' + IntToHex(Context.Eax, 8) + #13#10 );
c.ContextFlags := CONTEXT_FULL;
GetThreadContext(hThread, c);
ShowMessage('GetThreadContext' + #13#10 + 'EDI: ' + IntToHex(C.Edi, 8) + #13#10 +
            'ESI: ' + IntToHex(C.Esi, 8) + #13#10 +
            'EBX: ' + IntToHex(C.Ebx, 8) + #13#10 +
            'EDX: ' + IntToHex(C.Edx, 8) + #13#10 +
            'ECX: ' + IntToHex(C.Ecx, 8) + #13#10 +
            'EAX: ' + IntToHex(C.Eax, 8) + #13#10 );
end;

procedure ThreadProc(lpParam: pointer); stdcall;
asm
  //int   3
  push  offset _handler
  xor   eax, eax
  push  fs:[eax]
  mov   fs:[eax], esp
  mov   ebx, $12345678
  mov   [eax], eax
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  ThId: DWORD;
begin
hThread := CreateThread(nil, 0, @ThreadProc, nil, 0, ThId);
end;
По идее, MessageBox должен вывести значение регистра EBX, равное 0x12345678. Но этого не происходит...

[Хакер] :: Перенесено в Народный Треп. Вопросы, не связанные с VB, могут быть только здесь.
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.09.2007 (Пт) 9:06

А что, на Сях такой же код работает?
В любом случае, GetThreadContext для собственного потока -- это бред.
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.09.2007 (Сб) 8:59

tyomitch
В любом случае, GetThreadContext для собственного потока -- это бред.
Юзал лишь для проверки.
А что, на Сях такой же код работает?
Мне привели пример кода(на Делфях), концептуально ни чем не отличающийся от моего, но работающий. Вот только ни кто не знает, в чем же разница. Может у тебя есть мысли?

Хакер
Вопросы, не связанные с VB, могут быть только здесь.
Скажи, если код написан не на VB, то вопрос к VB не относится? :wink: Или в VB не задействован механизм SEH?
А я все практикую лечение травами...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 22.09.2007 (Сб) 9:41

Юзал лишь для проверки.
Дык он возвращает ошибку, и ничего не меняет в твоей структуре.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16117
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.09.2007 (Сб) 11:18

Скажи, если код написан не на VB, то вопрос к VB не относится?

В общем случае - нет.

Или в VB не задействован механизм SEH?

Задействован. Но это не значит, что все вопросы по SEH автоматически становятся "вопросами по VB". А ещё в VB используются указатели. Это же не повод вопросы по сишным указателям помещать в разделы по VB. А ещё msvbvm60 вызывает EnterCriticalSection. Это же не повод все вопросы пот многопоточности, синхронизации потоков и критическим секциям относить к "вопросам о VB"?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 22.09.2007 (Сб) 13:27

Мда
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.09.2007 (Вт) 6:21

Twister, у меня твой код из первого поста полностью работает. Компилировал в Delphi5.
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.10.2007 (Пн) 14:24

Извиняюсь что долго не отвечал - был в отпуске.
tyomitch писал(а):у меня твой код из первого поста полностью работает. Компилировал в Delphi5.
А я Delphi 7. Значит, все же, глюки Делфей... Тема закрыта.
ANDLL писал(а):Мда
Я догадываюсь, конечно, но... это ты про что?
Хакер писал(а):Это же не повод все вопросы пот многопоточности, синхронизации потоков и критическим секциям относить к "вопросам о VB"?
Форумов по VB или по ASMу не бывает. Так или иначе, но в них проскальзывают вопросы (а в основном - только они и проскальзывают), касаемые устройства и принципов работы операционной системы. Попробуй сам отфильтровать общий раздел этого форума по категориям - "Вопрос по ВБ" и "Другие вопросы". Ты увидишь, что первых будет гораздо меньше - это вопросы из серии "Каким оператором открыть файл на чтение?". Ну а человек, задающий вопрос или отвечающий в разделе для профессионалов, я уверен, знает не только ВБ и код на другом языке ни ему, ни кому либо другому не помеха. Вообщем, я думаю ты тут не совсем прав.
А я все практикую лечение травами...


Вернуться в Pascal/Delphi

Кто сейчас на конференции

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

    TopList