-
31. Data: 2017-09-07 19:53:15
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
W dniu czwartek, 7 września 2017 19:11:28 UTC+2 użytkownik fir napisał:
> W dniu czwartek, 7 września 2017 17:47:35 UTC+2 użytkownik wloochacz napisał:
> > W dniu 2017-09-07 o 01:16, Szyk Cech pisze:
> > >> co do asma to nie widzialem w zyciu jeszcze dobrego programisty ktory
> > >> by nie znal asma
> > >
> > > Z tym się zgodzę. Obecnie po studiach jest masa takich łajz co nie znają
> > > Asemblera ani nawet C++...
> > Lepsza łajza, która nie zna asemblera ani "nawet" C++ (tu wpisać dowolny
> > znany i nieznany język programowania), niż taka, która nie zna OOP i
> > wzorców projektowych.
> > Nie wie co to SOLID i KISS.
> > Nie zna podstaw programowania współbieżnego (prawda, fir?) ani
> > sieciowego (to też do ciebie, fir).
> > Nie potrafi zaprojektować systemu, który trzeba utrzymać, a nie tylko
> > napisać coś, co "działa".
> >
>
> heh, ciekawe pytanie ale nie umiem na nie jasno odpowiedziec (moze za jakis czas)
>
>
> [co do innych kwestii powyzej to nie calkiem jest to prawda (w dwu punktach jest
prawda ale w trzech nie)]
pozatym mozna by dodac dosyc oczywiste rzeczy
1) programiwanie to bardzo rozlegly temat
i trzeba sie specjalizowac
2) sam mozna powiedziec nie jestem programista na caly etat, jestem mozna powiedziec
programista na pol etetu, na pol etetu jestem teoretykiem programowania (i walnalem w
tej dziedzinie calkiem pokazna robote)
3) moje programy nie tylko dzialaja ale so tez jako tako dobrze napisane (tj ze
swiadomoscia niskopoziomową) - co wystarcza mi by iosiagnac pewien poziom zadowolenia
(z drugiej strony jak mowilem nie jest tak ze potrafie wszystko napisac, daleko do
tego, costam sie jedynie czasem relatywnie prosteo uda klepnac od czasu do czasu, jak
nie za trudne i jak mnie zmeczenie (i zly stan zdrowotny) nie przytlacza ;c )
-
32. Data: 2017-09-07 20:17:27
Temat: Re: [OT] (announce) organic asm
Od: wół, wół roboczy, wół dojno roboczo obronny 'POPIS/EU <N...@g...pl>
trafiłes w sedno
pytanie które ja sobie zadawałem od zawsze to jaki jest sens
doktoryzowania sie z modeli optymalnych...
i juz widac - trepów zassało wojsko/policja i płaci im >8000 pln... Ktos
wie za co?
-
33. Data: 2017-09-08 01:12:34
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
jutro jeszcze (zapewne) opisze jeszcze smutne kwestie multipasow i fixupow (ciekawe
tylko jesli ktos chce wiedziec jak dziala asm, mi samemu przyda si o tym wspomniec by
uzyskac wieksza jasnosc jak to dziala a jest to troche zagmatwane
moze w sumie pare slow juz teraz
1) na poczatku skanujac zrodlo buduje sekcje importow - oprocz samego binarnego
bloku tejh sekcji mam tez funkcja podajaca dla danego importu (podawanego po nazwie)
wartosc relatywnego wskaznika
wskazujacego miejsce gdzie lezy pointer do tej funkcji (ktory zostanie wypelniony
przez loader windy)
Oprocz tego istatna dana jest tez koncowy rozmiar tej sekcji
2) skanujac zrodlo buduje sekcje data oprocz niej mam funkcje ktora dla danego labelu
z sekcji data podaje re;atywny wskaznik do adekwatnej komorki w tej sekcji - oprocz
tego wazna dana jest finalny rozmiar tej sekcji
3) skanuje zrodlo i asembl;uje mnemoniki,
oprocz samych mnemonikow w zrodla mozna tam napotkac 4 rzeczy
l) label okreslajacy miejsce w kodzie (definicja np poczatku procedury)
c) odwolanie do labelu w kodzie (w przod lub w tyl) (glownie przez skoki)
d) odwolanie do labelu w danych (glownie przez mov)
i) odwolanie do importu (glownie przez call)
o tym co trzeba z tym zrobic moze jutro
(wlasciwie zadnego z tych labeli nie mozna przetlumaczyc na inta w pierwszym
podejsciu:
l) te labele trzeba zrzucic do tablicy razem z ich wartosciami (ktore przynajmniej
mozna od razu wyznaczyc)
c) odwolanie trzeba zrzucic do tablicy
razem z miejscem w kodzie ktore trzeba wypwlnic (ktore to miejsce tez na szczescie
mozna od razu ustalic)
d) odwolanie do danych tez trzeba zrzucic do tablicy razem z miejscem w kodzie ktore
trzeba wypelnic
i) odwolania do importow trzeba zrzucic do tablicy (azem zmiejscami ktore trzeba
wypelnic)
po zasemblowaniu tego otrzymuje sie rozmar sekcji kodu, ktory trzeba wyrownac w gore
co pozwala uzyskac polozenie sekcji importow, dodanie rozmiary wyrownanego w gore
rozmiaru sekcji importow daje adres poczatku sekcji data
teraz z tego co sie orientuje trzeba przeiterowac wszystkie 4 tabele i zarzucic te
fixupy, w wyniku czego powinnq powstac poprawnie wypelniona sekcja kodu, ktora razem
z sekcja importow i danych zapisuje sie na dyck
i zrobione
niby nie takie trudne ale obraz troche
komplikuja lekkie subtelnosci, glowni eto ze aligmenty sekcji w ramie sa ine niz w
pliku a same adresy czasem podaje sie w postaci relatywnych offsetow (zdaje sie ze
wiekszosc w sekcji importow juz nie pamietam a te w sekcji kodu raczej w postaci
pelnych absolutnych wskaznikow) idzie sie pogubic
do tego trzeba jeszcze poustawiac odpowiednie pola w naglowkach pe co tez jest co
nieco nieczytelee i dziwne
wiekszosc tego mam zrobione ale polozenie sekcji data i imports wklepalem na sztywno
(dzieki czemu nie musialem robic tabel fixupow dla danych i importow) i teraz wlasnie
musze to pewnie w weekend poprawic bytan asm wlasni enie mial ograniczen
(wogole szczerze mowiac nawet nieco dziwne mozna powiedziec jest to ze jak kodowalem
tego asma to wiekszosc problemow jakie tu wspomnialem udawalo sie jakos zakodowac
jakby w transie bez myslania o nich, jest to ciekawa zdolnosc , zdolnosc do
kodowania nez myslania o czyms o czym wydawaloby sie trzeba pomyslec) (pozniej
jednak, czyli teraz kapka myslania na te tematy sie przydaje - zeby miec jasnosci i
nie przeoczyc moze czegos, i moe tez po to by sie troche tego jak to dziala nauczyc
na pamiec)
-
34. Data: 2017-09-08 01:27:28
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
W dniu piątek, 8 września 2017 01:12:35 UTC+2 użytkownik fir napisał:
> jutro jeszcze (zapewne) opisze jeszcze smutne kwestie multipasow i fixupow (ciekawe
tylko jesli ktos chce wiedziec jak dziala asm, mi samemu przyda si o tym wspomniec by
uzyskac wieksza jasnosc jak to dziala a jest to troche zagmatwane
>
> moze w sumie pare slow juz teraz
>
> 1) na poczatku skanujac zrodlo buduje sekcje importow - oprocz samego binarnego
bloku tejh sekcji mam tez funkcja podajaca dla danego importu (podawanego po nazwie)
wartosc relatywnego wskaznika
> wskazujacego miejsce gdzie lezy pointer do tej funkcji (ktory zostanie wypelniony
> przez loader windy)
> Oprocz tego istatna dana jest tez koncowy rozmiar tej sekcji
>
> 2) skanujac zrodlo buduje sekcje data oprocz niej mam funkcje ktora dla danego
labelu z sekcji data podaje re;atywny wskaznik do adekwatnej komorki w tej sekcji -
oprocz tego wazna dana jest finalny rozmiar tej sekcji
>
> 3) skanuje zrodlo i asembl;uje mnemoniki,
> oprocz samych mnemonikow w zrodla mozna tam napotkac 4 rzeczy
> l) label okreslajacy miejsce w kodzie (definicja np poczatku procedury)
> c) odwolanie do labelu w kodzie (w przod lub w tyl) (glownie przez skoki)
> d) odwolanie do labelu w danych (glownie przez mov)
> i) odwolanie do importu (glownie przez call)
>
> o tym co trzeba z tym zrobic moze jutro
>
> (wlasciwie zadnego z tych labeli nie mozna przetlumaczyc na inta w pierwszym
podejsciu:
> l) te labele trzeba zrzucic do tablicy razem z ich wartosciami (ktore przynajmniej
mozna od razu wyznaczyc)
> c) odwolanie trzeba zrzucic do tablicy
> razem z miejscem w kodzie ktore trzeba wypwlnic (ktore to miejsce tez na szczescie
mozna od razu ustalic)
> d) odwolanie do danych tez trzeba zrzucic do tablicy razem z miejscem w kodzie
ktore trzeba wypelnic
> i) odwolania do importow trzeba zrzucic do tablicy (azem zmiejscami ktore trzeba
wypelnic)
>
> po zasemblowaniu tego otrzymuje sie rozmar sekcji kodu, ktory trzeba wyrownac w
gore co pozwala uzyskac polozenie sekcji importow, dodanie rozmiary wyrownanego w
gore rozmiaru sekcji importow daje adres poczatku sekcji data
>
> teraz z tego co sie orientuje trzeba przeiterowac wszystkie 4 tabele i zarzucic te
fixupy, w wyniku czego powinnq powstac poprawnie wypelniona sekcja kodu, ktora razem
z sekcja importow i danych zapisuje sie na dyck
> i zrobione
>
> niby nie takie trudne ale obraz troche
> komplikuja lekkie subtelnosci, glowni eto ze aligmenty sekcji w ramie sa ine niz w
pliku a same adresy czasem podaje sie w postaci relatywnych offsetow (zdaje sie ze
wiekszosc w sekcji importow juz nie pamietam a te w sekcji kodu raczej w postaci
pelnych absolutnych wskaznikow) idzie sie pogubic
>
> do tego trzeba jeszcze poustawiac odpowiednie pola w naglowkach pe co tez jest co
nieco nieczytelee i dziwne
>
> wiekszosc tego mam zrobione ale polozenie sekcji data i imports wklepalem na
sztywno (dzieki czemu nie musialem robic tabel fixupow dla danych i importow) i teraz
wlasnie musze to pewnie w weekend poprawic bytan asm wlasni enie mial ograniczen
>
> (wogole szczerze mowiac nawet nieco dziwne mozna powiedziec jest to ze jak
kodowalem tego asma to wiekszosc problemow jakie tu wspomnialem udawalo sie jakos
zakodowac jakby w transie bez myslania o nich, jest to ciekawa zdolnosc , zdolnosc
do kodowania nez myslania o czyms o czym wydawaloby sie trzeba pomyslec) (pozniej
jednak, czyli teraz kapka myslania na te tematy sie przydaje - zeby miec jasnosci i
nie przeoczyc moze czegos, i moe tez po to by sie troche tego jak to dziala nauczyc
na pamiec)
tak naprawde chyab to jest jeszcze bardziej skomplikowane, mianowicie zawartosc
sekcji importow zalezy od jej polozenia, a jej polozenie zalezy od rozmiaru sekcji
kodu - co wymusza inna kolejnosc niz pisalem
zdaje sie
- najpierw cod
- pozniej importy
- pozniej dane
- na koniec fixupy
idzie sie z leka pochlastac (zwlaszcza ze musze to przerabiac w stosunku do wersji z
polozeniemi sekcji wkodowanymi 'na sztywno')
-
35. Data: 2017-09-09 00:17:32
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
W dniu piątek, 8 września 2017 01:27:29 UTC+2 użytkownik fir napisał:
> W dniu piątek, 8 września 2017 01:12:35 UTC+2 użytkownik fir napisał:
> > jutro jeszcze (zapewne) opisze jeszcze smutne kwestie multipasow i fixupow
(ciekawe tylko jesli ktos chce wiedziec jak dziala asm, mi samemu przyda si o tym
wspomniec by uzyskac wieksza jasnosc jak to dziala a jest to troche zagmatwane
> >
> > moze w sumie pare slow juz teraz
> >
> > 1) na poczatku skanujac zrodlo buduje sekcje importow - oprocz samego binarnego
bloku tejh sekcji mam tez funkcja podajaca dla danego importu (podawanego po nazwie)
wartosc relatywnego wskaznika
> > wskazujacego miejsce gdzie lezy pointer do tej funkcji (ktory zostanie wypelniony
> > przez loader windy)
> > Oprocz tego istatna dana jest tez koncowy rozmiar tej sekcji
> >
> > 2) skanujac zrodlo buduje sekcje data oprocz niej mam funkcje ktora dla danego
labelu z sekcji data podaje re;atywny wskaznik do adekwatnej komorki w tej sekcji -
oprocz tego wazna dana jest finalny rozmiar tej sekcji
> >
> > 3) skanuje zrodlo i asembl;uje mnemoniki,
> > oprocz samych mnemonikow w zrodla mozna tam napotkac 4 rzeczy
> > l) label okreslajacy miejsce w kodzie (definicja np poczatku procedury)
> > c) odwolanie do labelu w kodzie (w przod lub w tyl) (glownie przez skoki)
> > d) odwolanie do labelu w danych (glownie przez mov)
> > i) odwolanie do importu (glownie przez call)
> >
> > o tym co trzeba z tym zrobic moze jutro
> >
> > (wlasciwie zadnego z tych labeli nie mozna przetlumaczyc na inta w pierwszym
podejsciu:
> > l) te labele trzeba zrzucic do tablicy razem z ich wartosciami (ktore
przynajmniej mozna od razu wyznaczyc)
> > c) odwolanie trzeba zrzucic do tablicy
> > razem z miejscem w kodzie ktore trzeba wypwlnic (ktore to miejsce tez na
szczescie mozna od razu ustalic)
> > d) odwolanie do danych tez trzeba zrzucic do tablicy razem z miejscem w kodzie
ktore trzeba wypelnic
> > i) odwolania do importow trzeba zrzucic do tablicy (azem zmiejscami ktore trzeba
wypelnic)
> >
> > po zasemblowaniu tego otrzymuje sie rozmar sekcji kodu, ktory trzeba wyrownac w
gore co pozwala uzyskac polozenie sekcji importow, dodanie rozmiary wyrownanego w
gore rozmiaru sekcji importow daje adres poczatku sekcji data
> >
> > teraz z tego co sie orientuje trzeba przeiterowac wszystkie 4 tabele i zarzucic
te fixupy, w wyniku czego powinnq powstac poprawnie wypelniona sekcja kodu, ktora
razem z sekcja importow i danych zapisuje sie na dyck
> > i zrobione
> >
> > niby nie takie trudne ale obraz troche
> > komplikuja lekkie subtelnosci, glowni eto ze aligmenty sekcji w ramie sa ine niz
w pliku a same adresy czasem podaje sie w postaci relatywnych offsetow (zdaje sie ze
wiekszosc w sekcji importow juz nie pamietam a te w sekcji kodu raczej w postaci
pelnych absolutnych wskaznikow) idzie sie pogubic
> >
> > do tego trzeba jeszcze poustawiac odpowiednie pola w naglowkach pe co tez jest co
nieco nieczytelee i dziwne
> >
> > wiekszosc tego mam zrobione ale polozenie sekcji data i imports wklepalem na
sztywno (dzieki czemu nie musialem robic tabel fixupow dla danych i importow) i teraz
wlasnie musze to pewnie w weekend poprawic bytan asm wlasni enie mial ograniczen
> >
> > (wogole szczerze mowiac nawet nieco dziwne mozna powiedziec jest to ze jak
kodowalem tego asma to wiekszosc problemow jakie tu wspomnialem udawalo sie jakos
zakodowac jakby w transie bez myslania o nich, jest to ciekawa zdolnosc , zdolnosc
do kodowania nez myslania o czyms o czym wydawaloby sie trzeba pomyslec) (pozniej
jednak, czyli teraz kapka myslania na te tematy sie przydaje - zeby miec jasnosci i
nie przeoczyc moze czegos, i moe tez po to by sie troche tego jak to dziala nauczyc
na pamiec)
>
> tak naprawde chyab to jest jeszcze bardziej skomplikowane, mianowicie zawartosc
sekcji importow zalezy od jej polozenia, a jej polozenie zalezy od rozmiaru sekcji
kodu - co wymusza inna kolejnosc niz pisalem
>
> zdaje sie
> - najpierw cod
> - pozniej importy
> - pozniej dane
> - na koniec fixupy
>
> idzie sie z leka pochlastac (zwlaszcza ze musze to przerabiac w stosunku do wersji
z polozeniemi sekcji wkodowanymi 'na sztywno')
nowsza wersja
minddetonator.htw.pl/organic8.zip
wiekszosc constraintow usunieta - jeszcze cos tam zostalo i asm pewnie wywali sie na
zbyt duzej asemblacji ale jestem zbyt 'sterany' by to dzis poprawic, ale jako ze
zdaje sie wiekszosc roboty zrobiona spokojnie poprawi sie to jutro i asm juz bedzie w
koncu 'limitless' (jeszcze mi tylko zostanie wtedy doklepac reszte opkodow)
-
36. Data: 2017-09-09 14:20:28
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
W dniu sobota, 9 września 2017 00:17:34 UTC+2 użytkownik fir napisał:
>
> minddetonator.htw.pl/organic8.zip
>
> wiekszosc constraintow usunieta - jeszcze cos tam zostalo i asm pewnie wywali sie
na zbyt duzej asemblacji ale jestem zbyt 'sterany' by to dzis poprawic, ale jako ze
zdaje sie wiekszosc roboty zrobiona spokojnie poprawi sie to jutro i asm juz bedzie w
koncu 'limitless' (jeszcze mi tylko zostanie wtedy doklepac reszte opkodow)
minddetonator.htw.pl/organic9.zip
wynikowy exe prawdopodobnie nadal sie wywali jesli ktoras z sekcji przekroczy
rozmiarem aligment sekcji (domyslnie 64 kb choc mozna ustawic pewnie i na 100 MB)
ale jednak poprawie to troche poziej (bo wymaga lekkiego ogarniecia) - w kazdym razie
juz tylko o krok od limitless / w pewlni ogolnego asemblowania
-
37. Data: 2017-09-09 21:57:00
Temat: Re: [OT] (announce) organic asm
Od: wół, wół roboczy, wół dojno roboczo obronny 'POPIS/EU <N...@g...pl>
w czym to piszesz? :O)
-
38. Data: 2017-09-10 01:50:53
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
W dniu sobota, 9 września 2017 21:57:10 UTC+2 użytkownik wół, wół roboczy, wół dojno
roboczo obronny 'POPIS/EU napisał:
> w czym to piszesz? :O)
w c, 120 kb (czyli 6 tys linijek) zrodla (z czego 20 kb to moja biblioteczka do
tekstow, 45 kb asmowy switch a 55 kb to reszta kodu) z api to potzebne jest fread
fwrite printf i niewiele wiecej
strasznie sie wlasnie nameczylem nad tymi fixupami (ktore wynikaja z tego ze wartosci
w sekcjach zaleza od polozen sekcji ktore zaleza od ich rozmiarow i sie robi kaszana)
i chyba dziala ale bedzie terzeba porzadnie testowac a z mojej satysfakci z kodu
zrobila sie troche kaszana
no ale skoro dziala to jest chyba ok ;c (tak naprawde nie wiem na ile fakt dzialania
mozna uznac za fakt bezblednosci - ale jest przynajmniej jakis spory procent szansy
ze jest ok, w nastepnych dniach sie potestuje)
-
39. Data: 2017-09-10 11:33:14
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
minddetonator.htw.pl/organic10.zip
no dobra jak dziala to chyba nie jest tak zle,
te fixupy mnie strasznie denerwowaly, ale jak dziala to chyba jest ok, (jeszcze musze
dodac sekcje .bb bo nie dodalem ale to sie chyba da zrobic prosto)
pozatym trzebedzie potestowac piszac rozne asemblerowe example, polampic sie wewnatrz
kodu czy nie dostrzege jakichs beldow i troche zrefaktoryzowac na czytelniejsze, no i
mozna by doklepac reszte mnemonikow
na razie jednak trzeba pewnie odpoczac bo jestem w tej fazie w ktorej koduje 7 razy
wolniej a to nie jest za dobre
-
40. Data: 2017-09-11 16:55:15
Temat: Re: [OT] (announce) organic asm
Od: fir <p...@g...com>
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