Avatar billede intel4004 Novice
04. december 2002 - 12:24 Der er 13 kommentarer og
1 løsning

ASCII koder vs. maskinkode

Jeg sidder også skriver semester-rapport til universitetet, og blev lige i tvivl om et par ting.

Der er ialt 256 ASCII-koder, med hex-værdier fra 00H til FFH. Jeg skriver noget om hvordan en CPU forstår disse tegn når de befinder sig en programfil (exe/com). F.eks. skal bogstaverne MZ stå i starten af enhver eksekverbar fil, men hvad gør disse instruktioner? Hvad hedder de i assembler.

Kan CPU'en forstå alle værdier fra 00H til og med FFH?? kan de alle refereres til en instruktion i assembler-sproget??

Eksempelvis hedder er JNE=75H (en slags metode) og NOP=90H. Disse eksisterer i de udvidede ascii-karakterer. Bruges alle værdier mellem 00H til FFH til CPU-instruktioner??

Mvh Intel4004

PS. Jeg fokuserer på pentium (1).
Avatar billede mfalck Praktikant
04. december 2002 - 12:29 #1
"ascii-karakterer" FY !!!  det hedder tegn - det lærte vi på første år !
Avatar billede benjams69 Nybegynder
04. december 2002 - 12:41 #2
Så hut jeg visker - bruger du hex. til at beskrive de forskellige steder i de forskellige registre som din cpu bruger... Du skal også regne med at alt det bliver compilet til binære tal -
Avatar billede soreno Praktikant
04. december 2002 - 12:43 #3
Hvis du kigger på nogle af de filer der er her:
http://www.wotsit.org/search.asp?page=2&s=binary

så vil du observere at MZ er en del af header information til en exe fil. En com fil indeholder ikke MZ.

Processoren ved at eks. 90h ikke har "parametre".

Hvis du vil "mov ax, 0123" så er værdien b82301
Altså er b8 mov ax
og 23 01 (som jo er i reverse byte sequence) repræsenterer værdien 01 23
Avatar billede soreno Praktikant
04. december 2002 - 12:49 #4
Muligvis giver:
http://www.intel.com/design/intarch/techinfo/pentium/opcode.htm

svar på dine direkte spørgsmål.
Avatar billede jespernaur Nybegynder
04. december 2002 - 12:57 #5
Du gør dig skyldig i en meget stor og forvirrende misforståelse, hvis du forveksler maskininstruktions-koder med ASCII-koder.

Der er tale om de mulige værdier, der kan rummes i en 8-bit byte. Værdiområdet går, som du også nævner, fra 00H til FFH.

Hvis indholdet i en 8-bit byte skal opfattes som en maskin-instruktion, afhænger det af den pågældende CPU, hvilke værdier der er lovlige. Dette kan normalt læses i processor-håndbogen for CPU'en. Der er ingen begrænsninger i, hvilke dele af området 00H til FFH, der kan være lovlige.

ASCII-kode er en måde at indkode tekst, for at kunne gemme teksten i lageret, med 1 byte per tegn. Den er meget udbredt, men det er dog ikke den eneste. Fx vil teksten

En tekst

komme til at se ud som

45 6E 20 74 65 6B 73 74

Mvh
Jesper Naur
Avatar billede intel4004 Novice
04. december 2002 - 13:21 #6
jexpernaur> Jeg ved ikke om misforstår noget overhovedet. Men det eneste jeg spørger om, er om værdi området kan gå fra 00H til FFH?? Jeg nævnte også at jeg fokuserer på pentium 1. Her snakker jeg nok også om grund-instruktionerne siden 386'eren...

Jeg er godt klar over at ASCII-kodernes repræsentation i symboler (i tegnkode-tabellen) slet ikke har at noget at gøre med maskin-instruktionerne. Men dette er nok den eneste måde af forklare det på... At eksempelvis É (90H=ascii 144)faktisk betyder instruktionen NOP.

Bloomniveauet for rapporten er sat til højst 3.

soreno> Du nævner at "mov, ax" er = B8H de næste 2 byte er derefter 2301 pga. af reverse sequence til værdien 0123H. Dette forstår jeg udemærket.

Hvad så med instruktionerne "mov, eax", "mov, ebx" og "add eax, ebx" - hvordan ser disse ud i ren maskinkode??

Intel4004
Avatar billede soreno Praktikant
04. december 2002 - 13:46 #7
Jeg har ikke lige kunne finde "manualen" til en pentium, men har fundet værdierne via W32Dasm (en disassembler).

8bcb mov ecx, ebx
8bc1 mov eax, ecx
8bc8 mov ecx, eax
83c328 add ebx, 28
Avatar billede intel4004 Novice
04. december 2002 - 15:37 #8
Ok tak.

Lige et hurtigs spørgsmål som kræver et hurtigt svar :)

Jeg bruger også W32Dasm for at belyse hvordan en cracker arbejder. Jeg er med på hvordan offsets virker. Men hvorfor står der 0040 foran hver eneste offset/adress i filen (i W32Dasm)???

Intel4004
Avatar billede soreno Praktikant
04. december 2002 - 16:18 #9
Jeg må melde pas på dit sidste spørgsmål - måske andre kan besvare det. Jeg må indrømme at jeg selv er blevet nysgerrig :-)
Avatar billede intel4004 Novice
04. december 2002 - 17:11 #10
soreno>
Takker. Men det er bare mystisk hvordan logikken er. I W32Dasm står der før den egentlige assembler-kode starter, at "Program entrypoint" er ved adressen 00401000 og file offset er 00004E00.

Starter alle exe-filer ved offset 400H??

Intel4004
Avatar billede soreno Praktikant
04. december 2002 - 21:13 #11
>>Starter alle exe-filer ved offset 400H??
Det finder jeg lidt mystisk. Windows bruger jo en flad memory model til allokering af memory. Derfor formoder jeg at alle user-processer starter ved 0h - de har jo hvert deres virtuelle hukommelses område.

Hvis du prøver lidt forskellige filer vil du observere at "File Offset" og "Program Entry Point" ikke altid er ens. Der står, som det øverste, hvordan fordelingen er - jeg vil gå udfra at denne fordeling bestemmes i den tidligere omtalte header som exe filer har.

F.eks. "rmiregistry.exe"
Disassembly of File: C:\Program Files\jdk1.4.1\bin\rmiregistry.exe
Code Offset = 00001000, Code Size = 00003000
Data Offset = 00005000, Data Size = 00002000

Number of Objects = 0003 (dec), Imagebase = 00400000h

Altså begynder code ved:
Imagebase(?) + Code Offset = 00401000h

Men hvad den "Imagebase" er for'n fætter, ja - det kunne jeg da også godt tænke mig at vide.
Avatar billede soreno Praktikant
12. december 2002 - 16:59 #12
Jeg ved ikke om du stadig er interesseret i hvilke opcodes der findes og hvilke værdier de har, men jeg er netop stødt ind i følgende som muligvis kunne være interessant:
http://www2.dgsys.com/~raymoon/faq/gen1.html#5
Avatar billede intel4004 Novice
14. december 2002 - 20:26 #13
ups...den gik helt gal. Jespernaur skulle have haft 25 og soreno skulle have 50. :(
Avatar billede intel4004 Novice
14. december 2002 - 21:04 #14
soreno> Takker for info om opcodes. Fandt du nogensinde ud af hvad imagebase er for noget? Hvorfor fylder den 4Megabyte i selve disassembler koden? Er det selve hukommelses segmentet programmet ligger sig i, der får den adresse-struktur med 4MB data i starten...eller what?? :)

Hvordan skal adresser forstås i W32Dasm hvis det ikke er offsets??

Intel4004
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester