Re[3]: HELP!!!
От: Алексей Владимирович Миронов Россия  
Дата: 28.06.03 15:40
Оценка: 21 (3) :)
Здравствуйте, <Аноним>, Вы писали:

А>Можно поподробнее о "поместить .obj в списке редактора связи _до_ libc.lib." как это сделать и будет ли это работать под средой?


Допустим, мы хотим заместить стандартную printf своей функцией. Мы сочиняем файл myprintf.c такого содержания:

#include <stdio.h>

int printf ( const char *format, ... )
{
  puts ( "Закрыто на учет!" );
  return 0;
}


и добавляем его в проект. Во всех остальных файлах проекта ничего переделывать не надо:

// main.c
#include <stdio.h>

void main ( void )
{
  printf ("Hello, world!\n");
}


Если теперь собрать проект средствами Visual Studio или скомпилировать его вручную:

cl main.c myprintf.c


то редактор связей возьмет _наш_ код функции printf, в чем легко убедиться:

[code]
main.exe
Закрыто на учет!
[/ccode]
... << RSDN@Home 1.0 beta 6a >>
HELP!!!
От: TAL_Shadow  
Дата: 28.06.03 14:24
Оценка:
Как можно переопределить функцию находящуюся в стандартной библиотеке (файл LIBC.LIB)


08.07.03 20:52: Перенесено модератором из 'Алгоритмы' в Средства разработки. — ХД
08.07.03 20:53: Перенесено модератором из 'Средства разработки' в С++. — ХД
Re: HELP!!!
От: Алексей Владимирович Миронов Россия  
Дата: 28.06.03 14:46
Оценка:
Здравствуйте, TAL_Shadow, Вы писали:

TS>Как можно переопределить функцию находящуюся в стандартной библиотеке (файл LIBC.LIB)


Достаточно написать собственную функцию с тем же именем и сигнатурой (т.е. принимаемыми параметрами, типом возвращаемого значения и соглашением о вызовах) и поместить .obj в списке редактора связи _до_ libc.lib.
... << RSDN@Home 1.0 beta 6a >>
Re[2]: HELP!!!
От: Аноним  
Дата: 28.06.03 15:17
Оценка:
Здравствуйте, Алексей Владимирович Миронов, Вы писали:

АВМ>Здравствуйте, TAL_Shadow, Вы писали:


TS>>Как можно переопределить функцию находящуюся в стандартной библиотеке (файл LIBC.LIB)


АВМ>Достаточно написать собственную функцию с тем же именем и сигнатурой (т.е. принимаемыми параметрами, типом возвращаемого значения и соглашением о вызовах) и поместить .obj в списке редактора связи _до_ libc.lib.


Можно поподробнее о "поместить .obj в списке редактора связи _до_ libc.lib." как это сделать и будет ли это работать под средой?
Re: HELP!!!
От: GarryIV  
Дата: 11.07.03 09:37
Оценка:
Hello, TAL_Shadow!
You wrote on Sat, 28 Jun 2003 14:24:28 GMT:

TS> Как можно переопределить функцию находящуюся в стандартной библиотеке

TS> (файл LIBC.LIB)

Извини но зачем такое извращение надо? Чтоб потом никто в твоем коде разобраться не смог? Человек видит вызов стандартной ф-ии и свято верит, что она делает то что ей по стандарту положено. Я представляю сколько времени он потратит и сколько нецензурных слов в твой адрес произнесет...

With best regards, Igor Evgrafov. E-mail: Don't reply use ievgrafo<AT>systems21{DOT}ru
Posted via RSDN NNTP Server 1.6
WBR, Igor Evgrafov
Re[2]: HELP!!!
От: Павел Кузнецов  
Дата: 11.07.03 15:18
Оценка:
Здравствуйте, GarryIV, Вы писали:

G> Hello, TAL_Shadow!

G> You wrote on Sat, 28 Jun 2003 14:24:28 GMT:

TS>> Как можно переопределить функцию находящуюся в стандартной

TS>> библиотеке (файл LIBC.LIB)

G> Извини но зачем такое извращение надо? Чтоб потом никто в твоем коде

G> разобраться не смог? Человек видит вызов стандартной ф-ии и свято
G> верит, что она делает то что ей по стандарту положено. Я представляю
G> сколько времени он потратит и сколько нецензурных слов в твой адрес
G> произнесет...

G> With best regards, Igor Evgrafov. E-mail: Don't reply use

G> ievgrafo<AT>systems21{DOT}ru

Настоятельно рекомендую настроить свой nntp-клиент в соответствии с правилами
размещения сообщений на форумах RSDN:
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: HELP!!!
От: AndrewJD США  
Дата: 12.07.03 08:05
Оценка:
Здравствуйте, GarryIV, Вы писали:



GIV>Извини но зачем такое извращение надо? Чтоб потом никто в твоем коде разобраться не смог? Человек видит вызов стандартной ф-ии и свято верит, что она делает то что ей по стандарту положено. Я представляю сколько времени он потратит и сколько нецензурных слов в твой адрес произнесет...


Такое "извращение" обычно нужно когда необходимо измнить стандартную функциональность не переписывая код (нету доступа к исходникам например). Хук Windows API считается хаком -- но без него некоторые вещи невозможно сделать.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re: HELP!!!
От: deviv  
Дата: 14.07.03 04:55
Оценка:
Здравствуйте, TAL_Shadow, Вы писали:

TAL>Как можно переопределить функцию находящуюся в стандартной библиотеке (файл LIBC.LIB)


Что ты конкретно хочешь?
У тебя есть исходники программы и ты хочешь ее перекомпилять так, чтобы вместо стандартной функции вызывалась твоя?
Или у тебя есть только исполняемый файл и ты хочешь чтобы подменить вызов стандартной функции?
... << RSDN@Home 1.1 beta 1 >>
WBR,
Влад Волосюк
Re[4]: HELP!!!
От: folk Россия  
Дата: 14.07.03 05:31
Оценка:
Здравствуйте, Алексей Владимирович Миронов, Вы писали:

АВМ>Здравствуйте, <Аноним>, Вы писали:


А>>Можно поподробнее о "поместить .obj в списке редактора связи _до_ libc.lib." как это сделать и будет ли это работать под средой?


АВМ>Допустим, мы хотим заместить стандартную printf своей функцией. Мы сочиняем файл myprintf.c такого содержания:


[]

Если мы имеем доступ к исходникам проекта, для которого следует подменить функцию, то проще использовать препроцессор:

#include <stdio.h>

#define printf my_printf

int my_printf ( const char *format, ... )
{
  puts ( "Закрыто на учет!" );
  return 0;
}

void main ( void )
{
  printf ("Hello, world!\n");
}
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[5]: HELP!!!
От: Алексей Владимирович Миронов Россия  
Дата: 14.07.03 13:19
Оценка:
Здравствуйте, folk, Вы писали:

F>Если мы имеем доступ к исходникам проекта, для которого следует подменить функцию, то проще использовать препроцессор:


Это, конечно, тоже вариант. Непонятно только, зачем нам доступ к исходным текстам проекта. Достаточно знать лишь имя функции и ее сигнатуру.
... << RSDN@Home 1.0 beta 6a >>
Re[6]: HELP!!!
От: folk Россия  
Дата: 14.07.03 23:54
Оценка:
Здравствуйте, Алексей Владимирович Миронов, Вы писали:

АВМ>Здравствуйте, folk, Вы писали:


F>>Если мы имеем доступ к исходникам проекта, для которого следует подменить функцию, то проще использовать препроцессор:


АВМ>Это, конечно, тоже вариант. Непонятно только, зачем нам доступ к исходным текстам проекта. Достаточно знать лишь имя функции и ее сигнатуру.


Как нам может помочь препроцессор, если у нас нет доступа к исходному тексту модуля, вызывающего функцию, которую надо подменить?
Если этот модуль доступен только в виде lib, то подменить функцию возможно только при компоновке. Примерно так как Вы и показали в предыдущем посте.
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[7]: HELP!!!
От: Алексей Владимирович Миронов Россия  
Дата: 15.07.03 12:58
Оценка:
Здравствуйте, folk, Вы писали:

F>Как нам может помочь препроцессор, если у нас нет доступа к исходному тексту модуля, вызывающего функцию, которую надо подменить?


Препроцессор действительно здесь не поможет, полностью с Вами согласен.

Мне почему-то прочиталось, будто речь шла об исходном тексте подменяемой функции.
... << RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.