Llevo tiempo con la idea de hacer un emular de kolibrios
Un saludo y muchas gracias
Ángel
Son los bytes que componen el programa ejecutableSoUrcerer wrote:Sorry, what bytecode?
Quiero hacer algo parecido a KlbrInWin o al MeOSEmulesevece wrote:Hol Ángel,
no entiendo bien qué es lo que quieres hacer.
Si tienes tiempo, explica más desarrollado qué es lo que quieres hacer.
Gracias.
Saludos desde Uruguay.
Esta información la he sacado de otro hilo, concretamene de aquí viewtopic.php?f=23&t=1362El DWORD después da 'MENUET01' es el número de versión de cabecera, debería ser 1.
El DWORD después de que es el puntero para iniciar de código, como se ha explicado antes.
El siguiente DWORD es el tamaño de todo el archivo, en bytes.
El DWORD después de que el tamaño es el programa tomará en la memoria (esto debería ser al menos tan grande como el DWORD anterior, si no más grande)
Exactamente... Pero en un lenguaje de alto nivel, C, Pascalesevece wrote:Sigo sin entender qué es lo que querés hacer. ¿Querés hacer un KlbrInWin?
He copiado el siguiente ejemplo:esevece wrote:Bien. Desconozco a qué te refieres con Bytecode. Pero en el enlace que te pasé se explica que hace cada parte de un programa para Kolibri. Hay ejemplos en C también (creo que no tan explicados como ensamblador).
Ahora estuve leyendo sobre Bytecode... por lo que entendí, lo utilizan los lenguajes tipo Python o Java que son lenguajes interpretados que no corren nativamente. Así que con los programas de Kolibri vas muerto
Code: Select all
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; EXAMPLE APPLICATION ;
; ;
; Compile with FASM ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; The header
use32 ; Tell compiler to use 32 bit instructions
org 0x0 ; the base address of code, always 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x100000
dd 0x7fff0
dd 0, 0
; The code area
include 'macros.inc'
START: ; start of execution
call draw_window ; draw the window
; After the window is drawn, it's practical to have the main loop.
; Events are distributed from here.
event_wait:
mov eax, 10 ; function 10 : wait until event
mcall ; event type is returned in eax
cmp eax, 1 ; Event redraw request ?
je red ; Expl.: there has been activity on screen and
; parts of the applications has to be redrawn.
cmp eax, 2 ; Event key in buffer ?
je key ; Expl.: User has pressed a key while the
; app is at the top of the window stack.
cmp eax, 3 ; Event button in buffer ?
je button ; Expl.: User has pressed one of the
; applications buttons.
jmp event_wait
; The next section reads the event and processes data.
red: ; Redraw event handler
call draw_window ; We call the window_draw function and
jmp event_wait ; jump back to event_wait
key: ; Keypress event handler
mov eax, 2 ; The key is returned in ah. The key must be
mcall ; read and cleared from the system queue.
jmp event_wait ; Just read the key, ignore it and jump to event_wait.
button: ; Buttonpress event handler
mov eax,17 ; The button number defined in window_draw
mcall ; is returned to ah.
cmp ah,1 ; button id=1 ?
jne noclose
mov eax,-1 ; Function -1 : close this program
mcall
noclose:
jmp event_wait ; This is for ignored events, useful at development
; *********************************************
; ****** WINDOW DEFINITIONS AND DRAW ********
; *********************************************
;
; The static window parts are drawn in this function. The window canvas can
; be accessed later from any parts of this code (thread) for displaying
; processes or recorded data, for example.
;
; The static parts *must* be placed within the fn 12 , ebx = 1 and ebx = 2.
draw_window:
mov eax, 12 ; function 12: tell os about windowdraw
mov ebx, 1 ; 1, start of draw
mcall
mov eax, 0 ; function 0 : define and draw window
mov ebx, 100 * 65536 + 300 ; [x start] *65536 + [x size]
mov ecx, 100 * 65536 + 120 ; [y start] *65536 + [y size]
mov edx, 0x14ffffff ; color of work area RRGGBB
; 0x02000000 = window type 4 (fixed size, skinned window)
mov esi, 0x808899ff ; color of grab bar RRGGBB
; 0x80000000 = color glide
mov edi, title
mcall
mov ebx, 25 * 65536 + 35 ; draw info text with function 4
mov ecx, 0x224466
mov edx, text
mov esi, 40
mov eax, 4
.newline: ; text from the DATA AREA
mcall
add ebx, 10
add edx, 40
cmp byte[edx], 0
jne .newline
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 2 ; 2, end of draw
mcall
ret
; *********************************************
; ************* DATA AREA *****************
; *********************************************
;
; Data can be freely mixed with code to any parts of the image.
; Only the header information is required at the beginning of the image.
text db "It look's like you have just compiled "
db "your first program for KolibriOS. "
db " "
db "Congratulations! ", 0
title db "Example application", 0
I_END:
; The area after I_END is free for use as the application memory,
; just avoid the stack.
;
; Application memory structure, according to the used header, 1 Mb.
;
; 0x00000 - Start of compiled image
; I_END - End of compiled image
;
; + Free for use in the application
;
; 0x7ff00 - Start of stack area
; 0x7fff0 - End of stack area - defined in the header
;
; + Free for use in the application
;
; 0xFFFFF - End of freely useable memory - defined in the header
;
; All of the the areas can be modified within the application with a
; direct reference.
; For example, mov [0x80000],byte 1 moves a byte above the stack area.

Los primeros byteCodes son:4D454E554554303101000000240000006301000000001000F0FF07000000000000000000E8350000006A0A58CD4083F801740C83F802740E83F8037410EBEAE81A000000
EBE36A0258CD40EBDC6A1158CD4080FC01750583C8FFCD40EBCB6A0C5831DB43CD4031C0BB2C016400B978006400BAFFFFFF14BEFF998880BF4F010000CD40BB
23001900B966442200BAAE0000006A285E6A0458CD4083C30A83C228803A0075F36A0C586A025BCD40C34974206C6F6F6B2773206C696B6520796F752068617665206A
75737420636F6D70696C6564202020796F75722066697273742070726F6772616D20666F72204B6F6C696272694F532E202020202020202020202020202020202020202020
2020202020202020202020202020202020202020202020202020436F6E67726174756C6174696F6E73212020202020202020202020202020202020202020202020200045786
16D706C65206170706C69636174696F6E00
Esto es muy interesante, aunque lo que hace es abrirme mas dudasSoUrcerer wrote:http://wiki.kolibrios.org/wiki/Writing_ ... The_header
I hope you already read this.
Si!!! el MTDBGSoUrcerer wrote:Just use disassembler.
¿Que tecla uso para bajar y ver el resto del programa? ¿Como ejecuto el programa paso a paso? ¿Existe algún manual?E8 35 00 00 00 call 5Eh
6A 0A push 0Ah
58 pop eax
CD 40 int 40h
83 F8 01 cmp eax,1
74 0C jz 3Fh
83 F8 02 cmp eax,2
74 0E jz 46h
83 F8 03 cmp eax,3
74 10 jz 4Dh
EB EA jmp 24h
E8 1A 00 00 00 call 5Eh
EB E3 jmp 29h
6A 02 push 2
58 pop eax
CD 40 int 40h
Users browsing this forum: No registered users and 6 guests