информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
значит дебагер и компилятор разные из двух значений используют 30.10.02 19:57  Число просмотров: 1144
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
дебагер тебе показывает саму main
а компилер присваивает адрес jmp
<programming>
Глупые вопросы часть 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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach