информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Глупые вопросы часть 3 :) 30.10.02 19:13  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
#include <stdio.h>
typedef void (*PROC)();

void main()
{
	printf( "a" );
	PROC p1;
	p1 = (PROC)main;
//	p1 = (PROC)0x401020;
	p1();
}

---

на строчку p1 = (PROC)main; ставим точку останова. идем в дебагере. видим что main = 0x401020, а p1 (после присваивания) 0x40100a. Во как !
И это не понятно.
Но чудеса продолжаются: раскоментариваем строку p1 = (PROC)0x401020; и видим что программка все равно работает. ей пофиг чему будет равняться p1: 0x40100a или 0x401020 - чудеса...
Глупые вопросы часть 3 :) 05.11.02 13:12  
Автор: SL Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А ты в какой среде работал? Я например твой пример в Borland Builder посмотрел - там все корректно...
Глупые вопросы часть 3 :) 03.11.02 20:38  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
а ты включи Disassembly - и потрассируй
может поможет =
Глупые вопросы часть 3 :) 01.11.02 10:36  
Автор: Ultra Статус: Незарегистрированный пользователь
<"чистая" ссылка>
>
> #include <stdio.h>
> typedef void (*PROC)();
> 
> void main()
> {
> 	printf( "a" );
> 	PROC p1;
> 	p1 = (PROC)main;
> //	p1 = (PROC)0x401020;
> 	p1();
> }
> 

---
>
> на строчку p1 = (PROC)main; ставим точку останова. идем в
> дебагере. видим что main = 0x401020, а p1 (после
> присваивания) 0x40100a. Во как !
> И это не понятно.
> Но чудеса продолжаются: раскоментариваем строку p1 =
> (PROC)0x401020; и видим что программка все равно работает.
> ей пофиг чему будет равняться p1: 0x40100a или 0x401020 -
> чудеса...
Зря ты так над С эксперементируешь, это тебе не асм, тут все намного сложнее, ведь это алгоритмический язык программирования.
А на счет твоей проги, я немного не понял, инфы мало. Если ты компилишь прогу под виньдовз, то почитай exe`шный фал в Hex`e и все поймешь. Просто виндовские проги начинают работать где-то с середины кода....
Я тоже сталкивался с такой проблеммой, и мне объяснили ее так.
там просто jmp стоит 30.10.02 19:34  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
А как объяснить разные значения после операции = ? 30.10.02 19:38  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
значит дебагер и компилятор разные из двух значений используют 30.10.02 19:57  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
дебагер тебе показывает саму main
а компилер присваивает адрес jmp
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach