ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

02.09.2007, 01:00
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
> Я это уже смотрел, но про CRT там ничего нет. Может он называется по-другому? Я в этом пока не разбираюсь(
#pragma comment(linker,"/entry:MyWinMain")
#pragma comment(linker,"/nodefaultlib")
void __stdcall MyWinMain( void ) {
...
}
|
|
|

02.09.2007, 01:46
|
|
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме: 5128756
Репутация:
2032
|
|
Уррря! Я постиг секрет хеккерской линковки!! Всем огромное спасибо! Особенно Kezу))
ЗЫ прикольно, в конце упикс пожал получившийся 16кб файл в 8 раз и получились заветные 2 кб!!! ))))))0
теперь можно спокойно идти спать.......
|
|
|

02.09.2007, 10:51
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
Ну если у тебя получился файл размером 16кб, значит ты не постиг тайну линковщика =)
Читай информацию по ссылке, которую я дал тебе в одном из своих сообщений.
|
|
|

02.09.2007, 16:44
|
|
Новичок
Регистрация: 29.01.2007
Сообщений: 17
Провел на форуме: 173732
Репутация:
0
|
|
http://uinc.ru/articles/28/
В билдере можно что-то подобное сделать? Пробовал как в статье:
#include <windows.h>
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:New_WinMain")
#pragma comment(linker,"/NODEFAULTLIB")
void New_WinMain(void) { ExitProcess(0); }
не получается, причем размер пустого проекта достигает 50! кб.
|
|
|

02.09.2007, 17:55
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
lexer666, дебаг билд?
|
|
|

02.09.2007, 20:41
|
|
Новичок
Регистрация: 29.01.2007
Сообщений: 17
Провел на форуме: 173732
Репутация:
0
|
|
В Bcb6 нет же режимов дебаг или релиз. В Vs05 при обоих режимах ошибки.
В Bcb6 можно собрать маленькое приложение, как в статье?
|
|
|

02.09.2007, 21:11
|
|
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме: 5128756
Репутация:
2032
|
|
lexer666
Код:
#include <windows.h>
#pragma comment(linker,"/entry:WinMain")
#pragma comment(linker,"/nodefaultlib")
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/MERGE:.data=.text")
#pragma comment(linker, "/SECTION:.text,EWRX")
#pragma comment(linker, "/IGNORE:4078")
#pragma comment(linker, "/opt:nowin98")
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
MessageBox(0,Path_to_WIN,Path_to_SYS, 0);
return 0;
}
у меня VS6. на выходе 1 кб.
|
|
|

02.09.2007, 22:35
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
Круто!!!
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/MERGE:.data=.text")
#pragma comment(linker, "/SECTION:.text,EWRX")
#pragma comment(linker, "/IGNORE:4078")
Кстати расположение данных в одну секцию .text при определенных условиях может у некоторых антивирей (Panda, AntiVir, ещё кто-то) вызывать подозрения.
|
|
|

02.09.2007, 22:57
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
lexer666, для bcb нужно отключать опции непосредственно в проекте, через pragma comment ты этого не сделаешь.
|
|
|

03.09.2007, 02:37
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
Код:
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/MERGE:.data=.text")
#pragma comment(linker, "/SECTION:.text,EWRX")
#pragma comment(linker, "/IGNORE:4078")
Многие считают что это некая просьба вижуал студии "пожалуйста, собери экзешник поменьше".
На самом деле юзать эти прагмы надо с умом, а /ignore:4078 можно вообще выкинуть. Видимо поэтому её и нет в линкерах следующих версий студий.
Если убираете CRT - вырубайте все проверки компилятора, туда ссылающиеся, делайте свой operator new и delete, и т.п. Причем в след. студиях Release сборка почему-то (никто не знает) позволяет создать бинарник меньше (из-за уменьшения выравнивания файла (не путать с секциями), такая опция есть только у линкеров VS6, дальше нету).
Вообщем, может я не тщательно смотрел, но в 7 и 8 студиях ставить релиз необходимо - иначе хер соберется самый маленький бинарник. Странно что они так сделали, по логике Debug и Release - "пресеты" настроек и не должны содержать в себе чего-то, что нельзя поменять через эти настройки.
Ещё насчет оптимизация - как-то уж очень хуево она сделана в студиях 7 и 8. А может и 6 - незнаю.
Ставишь minimize size и компиллер тебе женской логикой выбрасывает из кода всякое, по его мнению "говно", которое не используется или возвращает константу и т.п.
Последний раз редактировалось KEZ; 03.09.2007 в 02:39..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|