90

squalyl (./89) :
Wow, mais il fait quelle taille le boot 2 pour contenir tout ça? O_o

(et donc c'est tout l'OS dans la Flash NOR, et la NAND ne sert qu'au rootfs? si on peut comparer avec l'archi de Nucleus...)


Dans 1.6Mo on peut caser pas mal de choses.
En fait il pourrait être bien plus petit si TI avait compilé avec l'optimisation, compilé la plupart en Thumb alors que tout est un ARM, évité les fonctions dupliquées (FfxDclXXXX = RelDclXXXX et c'est souvent la même chose que la libc).

91

squalyl (./89) :
(et donc c'est tout l'OS dans la Flash NOR, et la NAND ne sert qu'au rootfs? si on peut comparer avec l'archi de Nucleus...)

Je dirais :
- Un boot 1 et des clés de crypto dans la NOR
- Un boot 2 dans la NAND décompressé en RAM par le boot 1 (la NOR ne fait que 512k)
- Un OS dans la NAND décrypté/décompressé en RAM par le boot 2, qui contient lui aussi l'intégralité de Nucleus, FFX/Reliance, libc et tout le tralala. En effet il n'y aucune exportation des entrées du boot 2, et l'OS peut être mis à jour indépendamment du boot 2 (mais bon, chaque version d'OS pourrait dépendre d'une version du boot 2).
- Une partie du FS en NAND, l'autre intégrée au boot 2 et à l'OS

92

./90> Nan mais là c'est une bonne chose qu'ils compilent en ARM je pense. Le Thumb c'est vraiment que pour les cas où tu as un bus 16 bits ou alors tu es vraiment limite niveau taille (ce qui n'est pas le cas avec 1.6 Mo tongue).
En tous cas ils sont bien cons d'avoir désactivé l'opti sur les 68k, je savais pas. Dommage, un petit boost notamment au niveau du TI-BASIC ça ferait pas de mal hehe
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

93

Ben le mode Thumb n'est pas si absurde que ça : la preuve, sur certains ARM récents (Cortex M3), le mode ARM n'est plus supporté : il n'y a plus que le Thumb-2, qui est un surensemble du jeu d'instructions Thumb d'origine.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

94

Brunni (./92) :
Le Thumb c'est vraiment que pour les cas où tu as un bus 16 bits


Justement la SDRAM est en bus 16 bits.
Enfin, le mode ARM ne doit pas être tellement plus lent, l'ARM9 a un cache donc avoir un code plus gros ne pénalise pas tant que ça dans les boucles.
En tout cas ça m'étonne car pour ce que je connais (téléphonie), on ne compile en ARM que les fonctions ayant un besoin de perf (mem*, str*, blitters, ...), la quasi totalité du code est en Thumb.

95

Nan mais ça doit être moi qui suis dépassé alors ^^ c'est quand même un sacré retour en arrière de ne supporter que le mode thumb je trouve eek mais dans les applis courantes je veux bien que le tradeoff perfs <-> taille est intéressant, surtout si t'as un faible cache.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

96

c'est quand même un sacré retour en arrière de ne supporter que le mode thumb je trouve eek

Plutôt +1, même si Thumb-2 est un sur-ensemble de Thumb.
Une des forces du jeu d'instructions de l'ARM7-9 (non Thumb) est justement d'être un compromis pas trop bête entre RISC ultra et CISC ultra (x86): <ea> prédécrémentées et postincrémentées, toutes instructions conditionnelles, etc. Forcément, c'est moins vrai pour Thumb et Thumb-2, même si ces deux-là ont bien sûr l'avantage de diminuer la taille des instructions.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

97

Les sprintf et fprintf trouvées ne sont pas les bonnes :
- elles sont limitées à 256 octets, et retournent -256 quand elles tronquent
- ce sont les versions vararg
donc je les ai renommées en vfprintf_limit256 et vsprintf_limit256

	MakeName	(0X11854FCC,	"sprintf");
	MakeName	(0X11854FF8,	"vfprintf_limit256");
	MakeName	(0X11855100,	"vsprintf");
	MakeName	(0X118558B8,	"vsprintf_limit256");
	MakeName	(0X1185A238,	"unlink");
	MakeName	(0X1185B538,	"NU_Make_Dir");
	MakeName	(0X1185B59C,	"NU_Remove_Dir");
	MakeName	(0X1185BBC8,	"NU_Set_Current_Dir");
	MakeName	(0X1185BCA8,	"NU_Current_Dir");
	MakeName	(0X1185BD44,	"NU_Set_Default_Drive");
	MakeName	(0X1185BDC0,	"NU_Get_Default_Drive");
	MakeName	(0X11879B04,	"FfxDclOsDirSetWorking");
	MakeName	(0X1189C18C,	"TfsLogInitialize");
	MakeName	(0X1189C29C,	"TfsLogVPrintf");
	MakeName	(0X118A1924,	"RelLogFileOpen");
	MakeName	(0X118A5424,	"RelDclDateTimeString");
	MakeName	(0X118A641C,	"rel_porttest_exec");
	MakeName	(0X118AF6F8,	"relFs_PortTests");
	MakeName	(0X118AFBB4,	"relPT_CreateTestFile");
	MakeName	(0X118B0060,	"relPT_FileExists");
	MakeName	(0X118B09DC,	"relPT_GetExpectedError");
	MakeName	(0X118B1CD8,	"InitializeDrive");
	MakeName	(0X118BAEB8,	"relPT_LogInitialize");
	MakeName	(0X118BAF1C,	"relPT_LogPrintf");
	MakeName	(0X118C21A0,	"Test_Basic_11");
	MakeName	(0X119033E8,	"rmdir");

98

119326E4 :
- appellerait des fonctions blowfish d'après http://www.unitedti.org/index.php?s=&showtopic=8191&view=findpost&p=136927
- est assez mal obfuscée
- est appelée par load_os (11802B10) et par cert_check_img_field_80F0 (1192948C) (un champ inconnu probablement crypté)
Bonne pioche ?

99

Plusieurs bonnes nouvelles :
- Les fonctions Blowfish trouvées par Goplat sont bien ce qu'elles sont
- Le champ 80F0 inconnu est en fait une version encryptée des champs précédents (product name, code, version, ...), validé au chargement de l'OS
- La clé est intégrée dans le boot 2 et planquée dans le code obfuscé
Avec un peu de chance la clé de cryptage de l'OS est la même.

100

Très intéressant smile
Si on bout, il va falloir passer les infos les plus importantes en privé, à cause de ces cons de chez TI...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

101

Lionel Debroux (./100) :
ces cons de chez TI...
Fais gaffe, TI va t'envoyer une lettre pour avoir révélé un truc confidentiel dehors
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

102

rotfl
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

103

Précise TI [USA] comme ça tu ne prends aucun risque cheeky
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

104

avatar

105

106

grin

107

grin lol

108

Si besoin un de ces jours, j'ai deux coeurs, dispo, il suffit de MP^^
...

109

Hephep, je te surveille bonhomme, tu n'as qu'un coeur à prendre tripo

110

tout dépend de quel(s) coeur(s)^^^.
...

111

Y a un truc qui me titille :
On trouve ceci comme chaîne de caractères dans le boot2 :
/phoenix/cert


Désolé pour ce post. Un modérateur pourrait-il le supprimer ?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

112

Y a un truc qui me titille :
On trouve ceci comme chaîne de caractères dans le boot2 :
/documents/Developer Unit/devunit.cer.tns
/phoenix/cert/devunit.cer.tns

Le premier truc atypique est que le certificat devunit est stocké dans un fichier tns et enfin devunit.cer.tns se trouve dans le dossier Documents. Ce dossier n'est pas censé être utilisé par l'utilisateur pour y stocker ses documents ?
J'ai essayé de cherche dans le boot si le certificat devunit y était stocké mais sans succès.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

113

J'ai extrait les chaînes de caractères d'une partie seulement de l'image en recadrant avec l'adresse de base 0x11800000.
Je vais tenter d'extraire les tables (il apparait que les offsets des chaînes de caractères sont stockées dans des tables ? A creuser !).

119537B4 Loading Operating System... 
11953AB8 Press any key to turn off 
119539B8     1. Cancel. Handheld will reboot. 
119540C0 .tnc;.tno 
119538BC /phoenix/cert/devunit.cer.tns 
11953CC0 USB-Host 
11953BC0 Invoking callback handler.
 
11953EC8 Unable to start Screen service, result=%d 
119531BC error at %s:%d
 
119540CC TI-Nspire CAS 
119535C2 Waiting for OS download.
 
119532C0 /documents 
11953CCC HID 
11952FC1 %d%% 
11953CD0 Vernier 
11952EC4 BOOT2 Error:  
119530C8 download failed 
11952FC8 Begin XMODEM file transfer.

 
119537D0 Error initializing ADC driver. 
119536D0 Waiting for load instructions.
 
11953AD4 Press any key to restart 
119532CE Done.
 
11953CD8 NavHDrvr 
119540DC .tnc 
119531D0 Kernel error. 
11953DDC Did not start Sync service, docsFolder not set 
11953FE0 screenCallback copy complete 
119538DC SCREENI_InitGraphics() error 
119540E4 TI-Nspire 
11953BE0 USBF_USER_NAV_EVENT_CONNECT

 
119532D8 TI_B2_MNT_ACTION_ERASEALL
 
11952ED4 System Error 
119539E0     2. Delete Operating System 
119534DC Installing factory image. 
119530D8 batteries are low - skipping test image. 
11953CE4 NavHUser 
119533DC B2APD 
119535E0 Operating System not found. Install OS now. 
119531E0 system error: %s
 
119540F0 .tno 
119533E4 Checking for NAND:  
11953CF0 84cHDrvr 
11953AF0 B2WRK 
11952EE4 Boot option:  
11953EF4 Unable to start Ext Echo service, result=%d 
119540F8 .tns 
119537F0 Error initializing power management. 
11952FE8 File transfer complete. Saving file.
 
119536F4 Factory image found. Press 'I' to install. 
11953CFC 84cHUser 
11954000 /\:*?<>| 
11953AFC Initializing USB subsystem... 
119538FA #
¦ 
119532F4 null 
119531F4 system error
 
119534F8 Purging temporary files...
 
11953C00 read error

 
11952EF4 Download Basecode 
11953A00     3. Delete Document Folder contents 
11953900 TI-Nspire.img 
119533FB Initializing graphics subsystem.
 
119532FC console 
11953D08 ASIC-FC 
1195400C ExtEcho Callback Connected 
11953E0C Unable to start message service, result=%d 
11953204 Initializing filesystem for maintenance...
 
11953104 File transfer complete. Saving pre-load file.
 
11953D10 ASIC-HC 
11953C10 NU_USBF_USER_NAV_SUBMIT_READ_BUFFER con read failed

 
1195360C Starting Connectivity services.
 
11953910 TI-Nspire.cer 
1195330C Boot Loader Stage 2 (1.4.1571)
 
11952F08 Download Temp 
11953D18 ASIC-OTG 
11953818 Configuring as a developer unit.
 
11953010 /tmp/temp.img 
11953B1C Done.
 
11953F20 Unable to start Sync service, result=%d 
11953518 Keypad request, preparing to load a test image.
 
11953920 /phoenix/install/TI-Nspire.tnc 
11953D24 ASIC-H2 
11954028 TI_NN_Write() returned %d
 
11953B24 Initializing interim USB loader... 
11953720 Copying pre-installed image into RAM.
 
11952F18 Normal 
11953420 ***PRELOAD_IMAGE*** 
11953A28     4. Complete format (includes 
11953D2C ROLEHISR 
11953020 errno = %d
 
11952F20 Checking battery level.
 
11952E28 SYSMEM 
11953630 USB Download is enabled.
 
11953E38 Unable to start InstallOS service, result=%d 
11953D38 USBEvtG 
11953330 Build: 2008/2/19, 23:19:10
 
11953030 error saving temp file 
11953234 posix_file_init() error.
 
11952E30 NOCACHE 
11953134 File saved. Installing new Operating System...
 
11953437 Initializing filesystem.
 
11953D40 USBpmTMR 
1195383C Error (%d) starting Connectivity services.
 
11954044 TI_NN_Read() returned %d
 
11953940 Operating System will be deleted 
11953F48 Unable to register stream connector, result=%d 
11952E38 Display 
11953C48 Error: too many bytes received.
 
11952F3C Battery level is OK.
 
11953B48 USB-Ldr 
11953D4C NS 
11953748 Copying factory image to RAM. 
11952E40 /documents/ 
11953A4C        operating system) 
11953D50 -e 
11953B50 ERROR.
 
1195364C Press <Enter> to download through the serial port. 
1195354C Ready to install test image. 
11953D54 New API: Load connector after all services started. 
11953048 File saved. Loading temp image...
 
11953350 Copyright (c) 2006, 2007, 2008 Texas Instruments Incorporated
 
11953250 Filesystem ready.
 
11952E4C /tmp/ 
11953454 Preparing file system, please wait... 
11954060 getNodeInfo: storageAvailable=%ld (0x%lX) 
11953B5C Write error

 
11952F54 Batteries are low - install fresh batteries.
 
11952E54 /tmp/manifest_img 
11953E68 Unable to start Node Info service, result=%d 
11953964 All saved data will be deleted 
11953A68 Press '1' to proceed 
11953C6C usbfstck 
11953B6C NU_USBF_USER_NAV_SUBMIT_READ_BUFFER failed

 
11953768 Erasing pre-installed image from filesystem area.
 
11953264 Entering maintenance mode.
 
11953168 Error saving pre-load file.
 
1195356E Loading Operating System...


 
11953F78 Unable to initialize NavNet, result=%d 
11952E68 wb 
11953C78 VSHuser 
1195306C Loading temporary image... 
11952E6C /tmp/TI-Nspire.tnc 
11953C80 VSHdrvr 
1195387C rb 
11953A80 Any other key to cancel 
11953880 /phoenix/cert 
1195347C /phoenix 
11953984 The device will be reformatted 
11953D88 ../device/src/navnet_init.c 
11953682 Stopping boot: no NAND memory found. 
11953C88 VSSUT 
1195408C getNodeInfo: storage=%ld (0x%lX) 
11953284 TI_B2_MNT_ACTION_DELETEOS
 
11952E80 /phoenix/manuf.dat 
11953488 /tmp 
11953C90 NavFUser 
11953188 install failed 
11952F86 BOOT2: loading complete (%d ticks), launching image.
 
11953890 /documents/Developer Unit/devunit.cer.tns 
11953088 Error loading temp image.
 
11953E98 Unable to start TE_MLPDev service, result=%d 
11953590 Error loading OS image. Removing OS remnants.
 
11953490 /phoenix/install 
11953390 Using production keys
 
11953A98 Replace batteries and try again 
11953C9C NavFDrvr 
11953B9C USBF_USER_NAV_EVENT_DISCONNECT

 
11953FA0 screenCallback copying %d bytes of screen memory from %p to %p 
1195379C posix_file_init() error 
11952E94 Critical voltage detected. Forcing shutdown.
 
11953198 batteries are low - OS not updated. 
11953DA4 NavNet Ready.
 
119539A4 Maintenance Options 
11953CA8 84cFUser 
119532A0 TI_B2_MNT_ACTION_DELETEFILES
 
119534A4 Copying pre-installed image from RAM into filesystem.
 
119540B0 Unknown 
119536A8 Found a pre-installed Phoenix image.
 
119530A4 Temporary Image error, stopping. 
119533A8 Clocks:  CPU = %dMHz   AHB = %dMHz   APB = %dMHz
 
11953DB4 Unable to register call back, result=%d 
11953CB4 84cFDrvr 
119540B8 .tns
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

114

./112 : cf ./47 ./48 ./86 ?

./113 : parce que ARM nécessite un stockage des adresses des chaînes proche de l'instruction l'utilisant, si on parle bien de la même chose.
Je te recommande vivement IDA, il fait déjà ce boulot à notre place.

115

Il semble y avoir un outil de dump de la flash à l'offset 0x11908430 "FlashFX Image Dump Utility". Ca pourrait être utile si on arrive à se débrouiller avec un buffer overflow.
L'installation de l'OS (/phoenix/install/TI-NSpire.tnc avec TI-NSpire.img) se fait vers l'offset 0x1192A880. Il a y création d'un dossier /ti84 vers l'offset 0x1192AEB0 suivie des messages d'erreurs d'installation de l'OS. (TI_OS_INSTALL_NOTIFYING_WIDGETS...). Et apparamment il se base sur un certificat : /cert/dpc.cer
L'extraction et la vérification des fichiers tns se fait vers l'offset 0x1192D240.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

116

11856808 fseek
Je suppose qu'entre le fclose et le fwrite on doit trouver les rewind, ftell et consort.

117

Suite de ./99 : je n'arrive pas à sortir la clé Blowfish de ce machin obfuscé, j'ai beau tourner le truc dans tous les sens avec OpenSSL.

Mais comme certains morceaux de load_os peuvent être simulés sans problèmes avec GDB, l'OS est maintenant décrypté smile

La recette, en partant d'un boot2.bin décompressé et d'un TI-Nspire.img issu d'un upgrade d'OS :
- Installer YAGARTO GNU ARM Chain
--change-addresses 0x11800000 boot2.bin boot.elf- Convertir le boot 2 décompressé au format ELF :arm-elf-objcopy.exe -I binary -O elf32-littlearm
- Extraire le champ de certificat 8070 de TI-Nspire.img vers un fichier os_encrypted.bin
- Lancer GDB : arm-elf-gdb
- Lancer les commandes suivantes de GDB, qui exécutent la fonction de décryptage lors du chargement de TI-Nspire.img par le boot 2 :
# GDB setup
file boot2.elf
target sim
load boot2.elf
break *0x11800000
display/i $pc
run

# OS code (dummy address)
set $r0=0x20000
# size of os_encrypted.bin (v1.7, .tno)
set $r1=3417512
# boolean (?)
set $r2=1
# key selector
set $r3=0x119538f9
# stack
set $r11=0x8000
# blowfish_decrypt
set $pc=0x11802618
restore os_encrypted.bin binary 0x20000
# may take a few seconds...
advance *0x1180261C
# $r0: size decrypted
dump memory os_decrypted.zip 0x20000 0x20000+$r0

- Extraire phoenix.raw de os_decrypted.zip
- Comme indiqué dans le champ de certificat 8080, la base address est 0x10000000.
- Laisser mouliner l'IDA, et explorer les milliers de petits maillons faibles.

(Ce n'est pas dans notre intérêt de faire trop de bruit sur le sujet, le boot 2 est modifiable par TI, même si l'absence de clé de cryptage écrite en NOR à l'usine n'est maintenant plus rectifiable par TI).

118

top

(ça va, je parle pas trop fort ? tongue)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

119

Alors la chapeau. top
Je confirme la manip marche nickel. wink
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

120

Des premières définitions toujours pour l'OS Nspire 1.7 (le linker a chamboulé l'ordre des fonctions par rapport au boot 2) :
	MakeName	(0X10059284,	"pthread_mutex_destroy");
	MakeName	(0X1005ACB8,	"malloc");
	MakeName	(0X101A5508,	"SMC_Delete_Semaphore");
	MakeName	(0X101A63AC,	"free");
	MakeName	(0X1029FAD8,	"mutex_lock");
	MakeName	(0X102A11BC,	"free_");
	MakeName	(0X102A274C,	"printf");
	MakeName	(0X102A280C,	"sprintf");
	MakeName	(0X102A2838,	"vfprintf_limit256");
	MakeName	(0X102A29D8,	"vsprintf");
	MakeName	(0X102A3190,	"vsprintf_limit256");
	MakeName	(0X102A46B4,	"fclose");
	MakeName	(0X102A4CBC,	"fopen");
	MakeName	(0X102A4EB0,	"fread");
	MakeName	(0X102A4FEC,	"fseek");
	MakeName	(0X102A5264,	"fwrite");
	MakeName	(0X102A5458,	"putc");
	MakeName	(0X102A54C4,	"puts");
	MakeName	(0X102A60DC,	"memcmp");
	MakeName	(0X102A611C,	"memcpy");
	MakeName	(0X102A62D4,	"memset");
	MakeName	(0X102A6838,	"memrev");
	MakeName	(0X102A6FE8,	"_fputc");
	MakeName	(0X102A7B00,	"close");
	MakeName	(0X102A8864,	"mkdir");
	MakeName	(0X102A89F4,	"open");
	MakeName	(0X102A9AA0,	"read");
	MakeName	(0X102AA5A8,	"unlink");
	MakeName	(0X102AA834,	"write");
	MakeName	(0X102ABF0C,	"NU_Set_Default_Drive");
	MakeName	(0X10381C6C,	"__rt_udiv_2");
	MakeName	(0X10381DAC,	"__rt_udiv_3");
	MakeName	(0X10381E90,	"__rt_sdiv");