TSR sobre la int 09h

Aquest petit codi en assembler 16 bits (sí, prehistòria informàtica), és una possible solució a una de les pràctiques que es proposen a l’assignatura de Sistemes Operatius de la Universitat d’Andorra. Vaig tenir la curiositat de reprendre la programació en ASM només per veure com de rovellat estava. La veritat és que n’estava molt!

L’enunciat de la pràctica és clar: s’ha de reescriure la rutina que controla el teclat de manera que quan es premi la tecla F3 s’enviï la comanda DIR<CR> a la consola. Això s’ha d’implementar mitjançant un programa TSR (Terminate and Stay Resident).

La solució que proposo no és del tot òptima per tota una sèrie de detalls que no venen al cas, però és prou vàlida per entendre els conceptes darrere els TSR i les interrupcions de BIOS i DOS.

He refrescat un munt de conceptes interessants que no havia tocat des de feia més de 20 anys. Assembler pot dur a la bogeria, però és un llenguatge que toca directament la màquina i tots els informàtics l’haurien de conèixer, crec, com a mínim una mica.

Codi font i executable: KBSwitch

Aquest codi no té llicència de cap tipus. En podeu fer el que vulgueu.

NOTA: No cal la instal·lació de màquines virtuals DOS com FreeDOS o DOSBox. Funciona sota Windows 7. Per compilar el codi font fa falta MASM32 i LINK16. Al codi font hi ha les instruccions per realitzar aquesta compilació.

Ara torno a la meva vida normal...

Com mostrar les línies no repetides en dos arxius

Objectiu:

Aquesta entrada mostra una comanda, o unió de comandes, Linux per tal de mostrar aquelles línies que no estan repetides en dos arxius. Això potser es pot aconseguir d’una altra manera però no he estat capaç de realitzar el mateix amb eines com diff o comm.

Procediment:

Suposem que disposem de dos arxius anomenats a1.txt i a2.txt. Cadascun d’aquests arxius mostra un contingut com el següent:

$ cat a1.txt
aaa
bbb
ccc
$ cat a2.txt
aaa
ddd
bbb

El resultat d’executar la comanda proposada retornarà el següent:

ccc
ddd

La comanda proposada és:

$ cat a1.txt a2.txt | sort | uniq -c | sort -nr | grep 1 | cut -d ' ' -f5 | sort
ccc
ddd

Fàcil, també, no? Lamentablement, no és perfecta del tot ja que la comanda grep 1 pot mostrar resultats no desitjats, però vaja…

ldapsearch i ldapdecode com a àlies

Objectiu:

Aquesta és una entrada molt simple únicament per definir dos àlies per realitzar cerques en un directori ldap d’una forma més còmoda en un entorn de consola.

Procediment:

Definirem els següents alies:

$ alias lds='function _lds(){ ldapsearch -H ldap://ldap.domain.org -x -w password -LLL -D "uid=ldapuser,cn=users,dc=domain,dc=org" -b "dc=domain,dc=org" "(uid=$1)" cn; }; _lds'
$ alias ldd="perl -MMIME::Base64 -n -00 -e 's/\n //g;s/(?<=:: )(\S+)/decode_base64(\$1)/eg;print'"

Per executar una cerca fem el següent:

$ lds username | ldd

Fàcil, no?

Afegir entrada al boot de Windows Server 2008 R2

Objectiu:

Disposar d’entrades extra al boot de Windows Server 2008 R2 mitjançant la comanda bcdedit.exe.

Procediment:

El procediment no és tant trivial com editar l’arxius boot.ini de versions anteriors de windows però es pot arribar a claudicar que el mètode actual és més robust.

Primer s’ha d’obrir un terminal amb permisos elevats, és a dir, executar el cmd.exe com a administrador. Després podem executar el següent per afegir una nova entrada amb opcions extra:

$ bcdedit # Mostra l'estat actual
$ bcdedit /copy {current} /d "Windows Server 2008 R2 - NoGPLPV"
$ bcdedit /set {ID} loadoptions nogplpv #ID Correspont a la nova entrada creada en el pas anterior
$ bcdedit # Verificar

En el moment d’arrencar la màquina la nova entrada ja estarà disponible. Si no se n’escull cap el sistema arrencarà amb l’entrada per defecte.

nginx amb rtmp amb autenticació d’usuari

Objectiu:

Volem disposar d’un servidor d’streaming que accepti el protocol RTMP. A més volem poder autenticar d’alguna manera els usuaris per a permetre la reproducció o no.

Procediment:

Per dur a terme la tasca utilitzarem nginx i el compilarem amb el mòdul nginx-rtmp-module. Com sempre, utilitzarem el sistema operatiu Debian, en aquest cas la versió 7 (Wheezy).

Continua llegint