-
Data: 2017-09-11 16:55:15
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]ok bss ez dodalem, (wystarczy sekcje data zadeklarowac jako o rezerwe wiekszą a
rozmiar w pliku podac jako tylko tym z wypelnionymi danymi i po prostu uzywac tej
resztki jako ststycznego bss-ramu
w sumie pewnie moge wkleiic ten kod ktory nagywa header exe na dysk - u mnie to sa
tylko minimalne pola tkniete ale dziala
void BuildAndSavePE(char* filename)
{
FILE *file = fopen(filename, "wb");
////////////////////////////////////////////////////
////////////////////// pe headers /////////////////////////////
IMAGE_DOS_HEADER dosHeader= {0};
dosHeader.e_magic = 0x5a4d; // MZ
dosHeader.e_lfanew = 0x00000040; //pe header offset in file
//0x40
IMAGE_NT_HEADERS ntHeader= {0};
ntHeader.Signature = 0x00004550; //PE 0 0
IMAGE_FILE_HEADER header= {0};
header.Machine = 0x014c; //i386
header.NumberOfSections = 3;
header.SizeOfOptionalHeader = 0x00e0; //not sure
header.Characteristics = 0x0002 + 0x0100; //executable + 32bit_machine
//0x58
IMAGE_OPTIONAL_HEADER opHeader= {0}; //Optional Header of PE files present in
NT Header structure
opHeader.Magic = 0x010b;
opHeader.AddressOfEntryPoint = Give_CodeSection_RamOffset();
opHeader.ImageBase = pe_base_ram_adr;
opHeader.SectionAlignment = ram_section_alignment;
opHeader.FileAlignment = file_section_alignment;
opHeader.MajorSubsystemVersion = 4;
opHeader.SizeOfImage = GiveRamImageSize(bss_reserve);
opHeader.SizeOfHeaders = file_section_alignment;
if(show_console)
opHeader.Subsystem = 3; //2-gui, 3 - console
else
opHeader.Subsystem = 2; //2-gui, 3 - console
opHeader.NumberOfRvaAndSizes = 16;
//0x0138
opHeader.DataDirectory[1].VirtualAddress = Give_ImportsSection_RamOffset();
////////////////////////////////////////////////////
/////
////////////////////////////////////////////////////
///////////////
IMAGE_SECTION_HEADER secHeaderCode= {0};
secHeaderCode.Name[0] = '.';
secHeaderCode.Name[1] = 'c';
secHeaderCode.Name[2] = 'o';
secHeaderCode.Name[3] = 'd';
secHeaderCode.Name[4] = 'e';
secHeaderCode.Misc.VirtualSize = AlignNumberUp( Give_Code_UnalignedSize() ,
ram_section_alignment);
secHeaderCode.VirtualAddress = Give_CodeSection_RamOffset();
secHeaderCode.SizeOfRawData = AlignNumberUp( Give_Code_UnalignedSize() ,
file_section_alignment);
secHeaderCode.PointerToRawData = Give_CodeSection_FileOffset();
secHeaderCode.Characteristics = 0x00000020 + 0x20000000 + 0x40000000;
/////
IMAGE_SECTION_HEADER secHeaderImports= {0};
secHeaderImports.Name[0] = '.';
secHeaderImports.Name[1] = 'i';
secHeaderImports.Name[2] = 'm';
secHeaderImports.Name[3] = 'p';
secHeaderImports.Name[4] = 'o';
secHeaderImports.Name[5] = 'r';
secHeaderImports.Name[6] = 't';
secHeaderImports.Name[7] = 's';
secHeaderImports.Misc.VirtualSize = AlignNumberUp( Give_Imports_UnalignedSize()
, ram_section_alignment);
secHeaderImports.VirtualAddress = Give_ImportsSection_RamOffset();
secHeaderImports.SizeOfRawData = AlignNumberUp( Give_Imports_UnalignedSize() ,
file_section_alignment);;
secHeaderImports.PointerToRawData = Give_ImportsSection_FileOffset();
secHeaderImports.Characteristics = 0x00000040 + 0x40000000;
//////
IMAGE_SECTION_HEADER secHeaderData= {0};
secHeaderData.Name[0] = '.';
secHeaderData.Name[1] = 'd';
secHeaderData.Name[2] = 'a';
secHeaderData.Name[3] = 't';
secHeaderData.Name[4] = 'a';
secHeaderData.Misc.VirtualSize = AlignNumberUp( Give_Data_UnalignedSize() ,
ram_section_alignment)
+ AlignNumberUp( bss_reserve ,
ram_section_alignment) ;
secHeaderData.VirtualAddress = Give_DataSection_RamOffset() ;
secHeaderData.SizeOfRawData = AlignNumberUp( Give_Data_UnalignedSize() ,
file_section_alignment);
secHeaderData.PointerToRawData = Give_DataSection_FileOffset();
secHeaderData.Characteristics = 0x00000040 + 0x40000000 +0x80000000 ;
////////
fwrite((char*)&dosHeader, 1, sizeof(dosHeader), file);
fwrite((char*)&ntHeader, 1, 4, file);
fwrite((char*)&header, 1, sizeof(header), file);
fwrite((char*)&opHeader, 1, sizeof(opHeader), file);
fwrite((char*)&secHeaderCode, 1, sizeof(secHeaderCode), file);
fwrite((char*)&secHeaderImports, 1, sizeof(secHeaderImports), file);
fwrite((char*)&secHeaderData, 1, sizeof(secHeaderData), file);
int header_size = + sizeof(dosHeader)
+ 4
+ sizeof(header)
+ sizeof(opHeader)
+ sizeof(secHeaderCode)
+ sizeof(secHeaderImports)
+ sizeof(secHeaderData);
////////////////////////////////////////////////////
////////////////////// code /////////////////////////////
fseek( file, Give_CodeSection_FileOffset(), SEEK_SET );
fwrite(code, 1, AlignNumberUp( Give_Code_UnalignedSize() ,
file_section_alignment), file);
fseek( file, Give_ImportsSection_FileOffset(), SEEK_SET );
fwrite((char*)idata, 1, AlignNumberUp( Give_Imports_UnalignedSize() ,
file_section_alignment), file);
fseek( file, Give_DataSection_FileOffset(), SEEK_SET );
fwrite(data, 1, AlignNumberUp( Give_Data_UnalignedSize() ,
file_section_alignment), file);
///// /// save last byte and exit
char zero =0;
fseek( file, GiveFileSize() - 1, SEEK_SET );
fwrite((char*)&zero, 1, 1, file);
fclose(file);
}
dobrze ze ten asmik dziala i w sumie nie wykluczone ze napisze jeszcze pare tekstow
na ten temat
1) bo to ciekawsze niz hallo worldy a rownoczesnie nie jakos strasznie duze
spokojnie daloby sie omowic nawet na grupie w calosci (big hallo world)
2) jest dobrym krokiem wyjscia do innych ciekawych tematow
Następne wpisy z tego wątku
- 11.09.17 17:03 fir
- 12.09.17 14:57 M.M.
- 12.09.17 16:59 fir
- 13.09.17 23:59 fir
- 14.09.17 21:11 wół, wół roboczy, wół dojno roboczo obronny 'POPIS/EU
- 14.09.17 22:08 fir
- 15.09.17 21:43 wół, wół roboczy, wół dojno roboczo obronny 'POPIS/EU
- 15.09.17 21:46 wół, wół roboczy, wół dojno roboczo obronny 'POPIS/EU
- 15.09.17 22:16 fir
- 22.12.17 12:18 AK
- 22.12.17 12:33 M.M.
- 22.12.17 12:47 AK
- 22.12.17 20:10 Wojciech Muła
- 22.12.17 20:54 AK
- 23.12.17 10:25 M.M.
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-14 granice
- 2025-07-14 Awaria VM?
- 2025-07-14 Gdańsk => Programista Kotlin <=
- 2025-07-14 Warszawa => Junior Rekruter <=
- 2025-07-14 Warszawa => Specjalista rekrutacji IT <=
- 2025-07-14 Wkłady do zniczy...
- 2025-07-14 Warszawa => Specjalista ds. Sprzętu Komputerowego <=
- 2025-07-14 Re: PO chroniło i chroni policyjnych bandziorów [zawiasy za katowanie obywatela (Poznań czerwiec 2012)]
- 2025-07-14 Warszawa => International Freight Forwarder <=
- 2025-07-14 Warszawa => Recruiter 360 <=
- 2025-07-14 Re: Rz?Âd ZAKAZUJE magazyn?Â?w energii ?!! Nowe prawo od 14 lipca to SZOK! ??Â
- 2025-07-14 Warszawa => Sales Assistant <=
- 2025-07-13 Fałszywe alerty
- 2025-07-12 dlaczego gadacie z tym debilem
- 2025-07-13 Unia Europejska przygotowuje nowy podatek