Здравствуйте, <Аноним>, Вы писали:
А>Можно поподробнее о "поместить .obj в списке редактора связи _до_ libc.lib." как это сделать и будет ли это работать под средой?
Допустим, мы хотим заместить стандартную printf своей функцией. Мы сочиняем файл myprintf.c такого содержания:
#include <stdio.h>
int printf ( const char *format, ... )
{
puts ( "Закрыто на учет!" );
return 0;
}
и добавляем его в проект. Во всех остальных файлах проекта ничего переделывать не надо:
Здравствуйте, 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." как это сделать и будет ли это работать под средой?
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
Здравствуйте, 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:
приветствие <<Hello, TAL_Shadow! You wrote on Sat, 28 Jun 2003 14:24:28 GMT:>>
сократить; лучше всего заменить на стандартное для RSDN.ru: "Здравствуйте, TAL_Shadow, Вы писали:"
в частности, время исходного сообщения из приветствия убрать.
Posted via RSDN NNTP Server 1.6 RC1
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
GIV>Извини но зачем такое извращение надо? Чтоб потом никто в твоем коде разобраться не смог? Человек видит вызов стандартной ф-ии и свято верит, что она делает то что ей по стандарту положено. Я представляю сколько времени он потратит и сколько нецензурных слов в твой адрес произнесет...
Такое "извращение" обычно нужно когда необходимо измнить стандартную функциональность не переписывая код (нету доступа к исходникам например). Хук Windows API считается хаком -- но без него некоторые вещи невозможно сделать.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, TAL_Shadow, Вы писали:
TAL>Как можно переопределить функцию находящуюся в стандартной библиотеке (файл LIBC.LIB)
Что ты конкретно хочешь?
У тебя есть исходники программы и ты хочешь ее перекомпилять так, чтобы вместо стандартной функции вызывалась твоя?
Или у тебя есть только исполняемый файл и ты хочешь чтобы подменить вызов стандартной функции?
Здравствуйте, Алексей Владимирович Миронов, Вы писали:
АВМ>Здравствуйте, <Аноним>, Вы писали:
А>>Можно поподробнее о "поместить .obj в списке редактора связи _до_ libc.lib." как это сделать и будет ли это работать под средой?
АВМ>Допустим, мы хотим заместить стандартную printf своей функцией. Мы сочиняем файл myprintf.c такого содержания:
[]
Если мы имеем доступ к исходникам проекта, для которого следует подменить функцию, то проще использовать препроцессор:
Здравствуйте, folk, Вы писали:
F>Если мы имеем доступ к исходникам проекта, для которого следует подменить функцию, то проще использовать препроцессор:
Это, конечно, тоже вариант. Непонятно только, зачем нам доступ к исходным текстам проекта. Достаточно знать лишь имя функции и ее сигнатуру.
Здравствуйте, Алексей Владимирович Миронов, Вы писали:
АВМ>Здравствуйте, folk, Вы писали:
F>>Если мы имеем доступ к исходникам проекта, для которого следует подменить функцию, то проще использовать препроцессор:
АВМ>Это, конечно, тоже вариант. Непонятно только, зачем нам доступ к исходным текстам проекта. Достаточно знать лишь имя функции и ее сигнатуру.
Как нам может помочь препроцессор, если у нас нет доступа к исходному тексту модуля, вызывающего функцию, которую надо подменить?
Если этот модуль доступен только в виде lib, то подменить функцию возможно только при компоновке. Примерно так как Вы и показали в предыдущем посте.
Здравствуйте, folk, Вы писали:
F>Как нам может помочь препроцессор, если у нас нет доступа к исходному тексту модуля, вызывающего функцию, которую надо подменить?
Препроцессор действительно здесь не поможет, полностью с Вами согласен.
Мне почему-то прочиталось, будто речь шла об исходном тексте подменяемой функции.