LonelyMan Skrevet 20. juli 2013 Forfatter Del Skrevet 20. juli 2013 (endret) Metoden jeg bruker for å beregne delta verdier og så absolutt verdi for heuristic kostnad, så har jeg eliminert all branching, den er 100% fri for branching. Det er nesten bortimot umulig å gjøre, det gjør at jeg kan kjøre metoden fritt i prosessoren uten avbrytning, dvs at den kjører ved prosessorens sanne hastighet uavbrutt. Hvis man ser på samme koden skrevet i et annet språk så er der noe rundt 10 brancher i den samme koden. Kan forøvrig legge til at, branching er ikke "demonisk" i seg selv, men man må forstå branching for å vite når man bør kvitte seg med det. F.eks, om du sjekker om du har nådd kanten av et map (for å unngå at du leser deler av et map som ikke eksisterer), så er ikke branching et onde, for der vil man få en misbranch veldig skjeldent. Men i tilfellet hvor man beregner kostnad av alle bevegelser så er branching er stort problem, derfor jeg har strevet så hardt med å kvitte meg med det i dette tilfellet. For normale programmerere, så kan de legge til en IF-THEN sjekk her og der uten å tenke mer over det, men når man blir en type programmerer som meg, så blir jeg forbannet om jeg bare må ha en eneste en av disse i programmet, for jeg vet hva slags skade det kan gjøre. Endret 20. juli 2013 av LonelyMan Lenke til kommentar
LonelyMan Skrevet 20. juli 2013 Forfatter Del Skrevet 20. juli 2013 Her er en funksjon jeg har laget for å hente ut alle registrene fra et hvilket som helst program som kjører fra en hvilken som helst posisjon, uten å forhindre kjøringen av programmet. Dette er noe jeg brukte for å lage trainere for spill, men det kan brukes som et verktøy om du driver med reverse engineering. proc getregs uses ebx esi edi,hprocess,address,pregs mov edi,[pregs] mov esi,[address] mov [edi+regs.inj_add],esi invoke VirtualAllocEx,[hprocess],NULL,1,MEM_RESERVE or MEM_COMMIT,PAGE_EXECUTE_READWRITE test eax,eax jz .end mov [edi+regs.base],eax lea eax,[edi+regs.oldcode] invoke ReadProcessMemory,[hprocess],esi,eax,7,NULL lea eax,[edi+regs.pold] invoke VirtualProtectEx,[hprocess],esi,7,PAGE_EXECUTE_READWRITE,eax mov [edi+regs.enabled],FALSE mov dword [r_one],esi mov eax,[xorkey1] mov dword [r_two],eax mov dword [r_four],eax mov dword [r_six],eax mov ecx,[edi+regs.base] mov dword [r_eleven],ecx add ecx,4 mov dword [r_three],ecx rept 4 n:0 { add ecx,4 mov dword [r_five+(n*6)],ecx } rept 4 n:0 { add ecx,4 mov dword [r_seven+(n*6)],ecx } mov dword [r_eight],esi rept 7 n:0 { mov al,[edi+regs.oldcode+n] mov byte [r_nine+(n*4)],al } mov eax,[edi+regs.base] add eax,40 mov dword [r_ten],eax stdcall WriteProcessMemoryX,[hprocess],eax,regs_code,regscode_size mov eax,[edi+regs.base] add eax,40 mov dword [jmp_instruction+1],eax stdcall WriteProcessMemoryX,[hprocess],esi,jmp_instruction,6 mov eax,TRUE .end: ret endp regs_code: label r_one at $+1 push $ff pushfd pushad push eax pushfd pop eax push esi bswap eax rol eax,1 label r_two at $+1 mov esi,$ffffffff xor eax,esi pop esi push eax label r_three at $+2 pop dword [$ffffffff] pop eax push esi bswap eax bswap ebx bswap ecx bswap edx rol eax,1 rol ebx,1 rol ecx,1 rol edx,1 label r_four at $+1 mov esi,$ffffffff xor eax,esi xor ebx,esi xor ecx,esi xor edx,esi push eax ebx ecx edx label r_five at $+2 rept 4 { pop dword [$ffffffff] } pop esi mov eax,esp mov ebx,ebp mov ecx,esi mov edx,edi bswap eax bswap ebx bswap ecx bswap edx push esi rol eax,1 rol ebx,1 rol ecx,1 rol edx,1 label r_six at $+1 mov esi,$ffffffff ; esi = xorkey xor eax,esi xor ebx,esi xor ecx,esi xor edx,esi push eax ebx ecx edx label r_seven at $+2 rept 4 { pop dword [$ffffffff] } pop esi label r_eight at $+1 mov eax,$ffffffff label r_nine at $+2 rept 7 { mov byte [eax],$ff inc eax } push 1 label r_eleven at $+2 pop dword [$ffffffff] cld label r_ten at $+1 mov edi,$ffffffff xor eax,eax mov ecx,($+5)-regs_code rep stosb popad popfd ret regscode_size = $-regs_code Lenke til kommentar
Gjest Slettet+9871234 Skrevet 22. juli 2013 Del Skrevet 22. juli 2013 Her er en funksjon jeg har laget for å hente ut alle registrene fra et hvilket som helst program som kjører fra en hvilken som helst posisjon, uten å forhindre kjøringen av programmet. Dette er noe jeg brukte for å lage trainere for spill, men det kan brukes som et verktøy om du driver med reverse engineering. Jeg ser både lyst og mørkt på fremtiden ang assembler og andre språk. Det er lyse og mørke sider for begge delene. Det ene problemet for assembler er at det blir bare flere og flere instruksjonssett tilgjengelige, og antall instruksjoner vil en dag bli for mye for en assembler programmerer å håndtere. Det vil ikke bli praktisk lengre, men dette behøver ikke skje om utviklingen gjør at gamlere instruksjoner forsvinner, noe som det gjorde med implementering av x64 så forsvant noen eldre instruksjoner for å gjøre plass for nye. Det andre er om prosessorer blir mer risc like i fremtiden, om det er tilfellet blir jobben for kompilatorer enklere å finne en optimal løsning, og det gjør at behovet for assembler blir mindre. Men om det fortsetter i retningen vi går nå, som er mer cisc like, hvor vi får flere og flere instruksjoner tilgjengelige, så vil kompilatorer slite veldig med å finne den optimale løsningen, hvilket gjør at assembler går motsatt vei, blir mer og mer nyttig. Assembler instruksjonene i din siste post virker da kjent. Hvilken prosessor er den skrevet for? Asm fungerer også utmerket til å utvikle server programvare, da behøver ikke programmet ditt være portabelt, klientene har ingen visshet om hva serveren gjør uansett, så på en server kan du pakke den full med asm programmer uten negative konsekvenser. Som man kan styre fra en nettside? Lenke til kommentar
LonelyMan Skrevet 22. juli 2013 Forfatter Del Skrevet 22. juli 2013 (endret) Den støtter alle ia-32 prosessorer og alle nye x86-64 prosessorer, inkludert alle som er bakoverkompatibelt med x86. Koden fungerer i 32 bit windows og 64 bit windows, sistnevnte under wow64. Om jeg skal nevne spesifike prosessorer så vil det ta veldig lang tid for listen er lang. Instruksjonene er nok kjent ja, for sjansen er nesten 100% at instruksjoner går igjen fra et asm program til et annet. Men om koden virker kjent, vel, vanskelig å si om noen har skrevet noe liknende, om du har sett noe som er prikk likt, så må det være stjelt fra meg, for dette er min kode som jeg har laget selv. Men alle som programmerer opp mot andre prosesser, disse asm programmene har en tendens til å se like ut. (Mulig det er WriteProcessMemory som du kjenner igjen, det står en X bak min variant, dvs jeg har customisert min egen variant for å forhindre dll injection i den originale API varianten, derfor jeg la på X i navnet) Styre fra nettside ja. Endret 22. juli 2013 av LonelyMan Lenke til kommentar
Gjest Slettet+9871234 Skrevet 23. juli 2013 Del Skrevet 23. juli 2013 (endret) Instruksjonene er nok kjent ja, for sjansen er nesten 100% at instruksjoner går igjen fra et asm program til et annet. Men om koden virker kjent, vel, vanskelig å si om noen har skrevet noe liknende, om du har sett noe som er prikk likt, så må det være stjelt fra meg, for dette er min kode som jeg har laget selv. Men alle som programmerer opp mot andre prosesser, disse asm programmene har en tendens til å se like ut. Jeg var kanskje litt upresis. Jeg mener at de fleste instruksjonene (notene) virket kjente. Hele koden (komposisjonen) kjenner jeg ikke igjen. (Mulig det er WriteProcessMemory som du kjenner igjen, det står en X bak min variant, dvs jeg har customisert min egen variant for å forhindre dll injection i den originale API varianten, derfor jeg la på X i navnet) Nei snarere tvert imot WriteProcessMemoryX samt invoke VirtualAllocEx er nettopp kode jeg ikke kjenner igjen. Styre fra nettside ja. Veldig spennende. Har tenkt på dette selv. Fint at du bekrefter det. Endret 23. juli 2013 av Slettet+9871234 Lenke til kommentar
LonelyMan Skrevet 24. juli 2013 Forfatter Del Skrevet 24. juli 2013 (endret) Du kan f.eks bruke php til å starte programmet på serveren. Tenker du på å konvertere videoer på serveren gjennom en webside? Er det en kompleks algoritme? Hvis det er en offisiell tjeneste for å konvertere diverse ting og ting skal stå i kø fra flere klienter, så er det ikke tvil om at asm kan hjelpe stort der, gjør deg sterkt konkurransedyktig. Om en annen server klarer å betjene 1000 stk per minutt, så kan du ved hjelp av asm kanskje klare å betjene dobbelt av det, eller firedobbelt. Endret 24. juli 2013 av LonelyMan Lenke til kommentar
LonelyMan Skrevet 24. juli 2013 Forfatter Del Skrevet 24. juli 2013 (endret) Om jeg hadde gjort noe liknende, så ville det ikke vært noe kommersielt, men kanskje noe på hobbybasis, og så ha en maskin på hjemmefront med webserver, php og diverse på den, og så ha en winsock server som deler arbeidet mellom hjemmemaskinene, for å utføre en spesifik oppgave som krever mye cpu kraft. Endret 24. juli 2013 av LonelyMan Lenke til kommentar
LonelyMan Skrevet 25. juli 2013 Forfatter Del Skrevet 25. juli 2013 (endret) Jeg har funnet et navn for pathfinding prosjektet mitt. Laget av LonelyMan. Features: Speed above else Quality equally important Can run as a server Upgrade from client Best algorithms used Implemented in assembly Automatic optimization Extensive help file Latest cpu tech guarantee Wickedly hand crafted Extremely reliable Fully portable Pay for two, get one (haha) Buy once, upgrade forever. ($99) Description: "LonePath is a pathfinding library designed to provide all functionality of pathfinding with one major goal in mind; to overcome the speed problem that other pathfinding libraries are stuck with. LonePath will feed your game with path's faster than the speed of light. The only requirement is that you follow a few very simple design principles for the library to function optimally." Feedback from earlier buyers: "Bob: Thanks for this library, it ran so fast that my computer melted" "Julius: Our company benefited immensely from this, it ran so fast that the entire development compartment had a mutual and collective orgasm" "Pumba: This made it possible for us to create huge swarms of units in our game" Endret 25. juli 2013 av LonelyMan Lenke til kommentar
Gjest Slettet+9871234 Skrevet 29. juli 2013 Del Skrevet 29. juli 2013 Du kan f.eks bruke php til å starte programmet på serveren. Tenker du på å konvertere videoer på serveren gjennom en webside? Nei ikke slik som videoer streames når de lastes opp til video delings siter. Jeg tenker på andre ting. Kan man for eksempel kjøre C / C++ / ASM kode via en php kron jobb på serveren? Det går kanskje ikke på en delt server, men på en dedikert eller kolokert server burde det vel være mulig? Lenke til kommentar
LonelyMan Skrevet 29. juli 2013 Forfatter Del Skrevet 29. juli 2013 Du kan kjøre programmer fra et php script, da burde du kunne kjøre det i en kron jobb også. Jeg er ikke kjent med oppsettet av php kron jobber, jeg har bare erfaring med kron jobber i linux. Men jeg er helt sikker på at du kan kjøre asm programmer i en php kron jobb, da slike jobber ikke definerer strukturen til php, den bare setter opp tidsbestemte oppgaver og går ikke utover mulighetene til php scriptet, med unntak av kanskje policyer satt på serveren, det må du selv sjekke. Men slik som jeg ser det, om du skal både finne ut hvordan du kan kjøre asm programmer, om det går an og samtidig lage asm programmet, eventuelt finne ut om du faktisk behøver dette samt. finne ut om det er mulig å få en gevinst, så tror jeg tingene veier for at du bare går for den mest lettvinte løsningen. Om du skal sette opp et asm program, så bør man på det helt basiske, i det minste være troende, dvs. man vet hva man gjør, hva man oppnår og hvorfor en gjør det. Jeg tror ikke du vil få en gevinst, på tross av at jeg ikke vet hva du skal gjøre, det er en intuisjon jeg har. Du må gjerne forklare hva du har som intensjon å gjøre, men jeg har en stygg magefølelse her. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå