ertin
Üye
#Merak serisi 2 Kmidrun.exe Derin-Hack
kmidrun.exe, Nokia 3650’nin sistem ROM’unda (Z:\System\Programs\kmidrun.exe) bulunan ve Symbian OS Series 60 1st Edition’da yer alan bir yürütülebilir dosyadır. Bu dosya, telefonun Java MIDP (Mobile Information Device Profile) çalışma zamanının bir parçasıdır. Özellikle, Symbian OS 6.1 tabanlı Series 60 platformunda sağlanan Sun Microsystems KVM (Kilobyte Virtual Machine) adlı Java sanal makinesine ait bir bileşendir. Geliştirici dokümanlarında “KVM sanal makine konumu (ROM sürücüsünde)” olarak anılmakta ve doğrudan ROM içindeki kmidrun.exe dosyasına referans verilmektedir. Bu konum, dosyanın cihaz yazılımına (firmware) dahil orijinal bir parça olduğunu, sonradan yüklenmiş bir uygulama olmadığını gösterir. Başka bir deyişle, kmidrun.exe Symbian işletim sisteminin ve Nokia’nın Series 60 Java desteğinin dahili bir bileşenidir; kullanıcının elle yüklediği üçüncü parti bir yazılım değildir. Z:\ sürücüsü yalnızca üretici firmware’i tarafından değiştirilebilir olduğundan, bu dosya telefonun fabrika yazılımının bir parçasıdır ve kullanıcı tarafından kaldırılamaz ya da değiştirilemez.
kmidrun.exe dosyasının temel işlevi, Java MIDlet olarak adlandırılan Java uygulamalarını çalıştırmaktır. Nokia 3650 gibi Symbian S60 1st Edition cihazlarda, bir J2ME (Java 2 Micro Edition) uygulaması başlatılacağı zaman, sistem arka planda kmidrun.exe sürecini kullanarak ilgili Java uygulamasını yükler ve yürütür. Bu yürütücü, gerekli parametreleri alarak Java sanal makinesini başlatır ve MIDlet kodunu çalıştırır. Teknik dokümanlar, bir MIDlet’in kmidrun.exe aracılığıyla nasıl başlatıldığını detaylandırmaktadır: Yeni bir sanal makine süreci oluşturulur ve çalıştırılacak MIDlet’e dair bilgiler bu sürece komut satırı parametreleri olarak aktarılır. Bu parametreler arasında MIDlet için ayrılmış bir TCP/IP port numarası, MIDlet’in benzersiz UID değeri, MIDlet adı ve MIDlet’in .jar ile .jad dosyalarının tam yolları bulunur; tümü belirli bir formatla, * karakteri ile ayrılarak iletilir. Kmidrun.exe bu bilgileri alarak Java sanal makinesini başlatır ve belirtilen MIDlet’i çalıştırır. Özetle, kmidrun.exe Java uygulama başlatıcısı görevi görür – bir Java oyun, araç veya diğer MIDP tabanlı uygulamayı açtığınızda, arka planda bu dosya devreye girerek Java kodunun çalışmasını sağlar.
Symbian OS mimarisinde kmidrun.exe, Java çalışma zamanının kritik bir parçasıdır ve Java Uygulama Yürütme Ortamı rolünü üstlenir. Series 60 1st Edition cihazlarda (Symbian OS 6.1 üzerinde), MIDP 1.0 profiline uygun Java desteği sunulmuştur. Bu ortamın kalbinde yer alan kmidrun.exe, Java sanal makinesini (KVM) başlatarak Java bytecode’larının çalışmasını mümkün kılar. Symbian OS, mikro çekirdekli ve çok süreçli bir işletim sistemi olduğu için, kmidrun.exe her Java MIDlet için ayrı bir süreç (process) olarak çalışır. Uygulama menüsünde bir Java oyunu veya uygulaması seçildiğinde, sistem o MIDlet’i kmidrun.exe vasıtasıyla yükleyip çalıştırır. Bu sayede Java uygulamaları, Symbian’ın yerel (native) C++ uygulamalarından ayrı bir ortamda izole şekilde yürütülür.
Kmidrun.exe ayrıca Symbian’ın uygulama yönetim altyapısıyla da etkileşim halindedir. Örneğin, Java MIDlet’lerin kurulumu ve başlatılması, Symbian’ın RApaLsSession gibi API’ları ile entegre çalışır. Nokia’nın teknik kaynaklarına göre, Series 60 1st Edition’da bir MIDlet programatik olarak başlatılmak istendiğinde, geliştiriciler RProcess sınıfıyla Z:\System\Programs\kmidrun.exe dosyasını bir süreç olarak yaratıp parametrelerle çalıştırmaktadırlar. Sonuç olarak kmidrun.exe, Symbian OS içinde Java yürütme servisi gibi davranır ve Java platformunun Symbian’a entegrasyonunu sağlar. Bu rol, Symbian OS’in modüler yapısında Java için ayrılmış bir alt sistem olarak düşünülebilir; kmidrun.exe de o alt sistemin çekirdeğidir.
Kmidrun.exe, Nokia 3650’nin üretici yazılımında gelen orijinal bir sistem dosyasıdır. Üçüncü parti uygulamalarla birlikte gelen bir bileşen değildir. Dosyanın Z:\System\Programs dizininde bulunması, onun telefonun salt-okunur ROM’unda yer aldığını ve yalnızca Nokia/Symbian tarafından sağlandığını gösterir. Nitekim, geliştirici kodlarında kmidrun.exe’ye “ROM’daki KVM konumu” şeklinde atıf yapılmıştır. Kullanıcılar normalde bu dosyayı görmez veya doğrudan çalıştırmaz; sistem, Java uygulamaları yönetirken arka planda bunu kullanır. Bu dosyanın varlığı, Nokia 3650’nin Java MIDP 1.0 desteğini kendi içinde barındırdığını, harici bir yüklemeye ihtiyaç duymadığını kanıtlar. Dolayısıyla kmidrun.exe, Nokia ve Symbian’ın orijinal yazılımının bir parçasıdır ve telefonda bulunması normal ve beklenen bir durumdur.
Bir karşılaştırma yapmak gerekirse, daha sonraki Symbian sürümlerinde (S60 2nd Edition ve sonrası) Java MIDlet çalıştırma mekanizması değişmiş; örneğin S60 3rd Edition’da JavaLauncher.exe gibi farklı yürütücüler kullanılmıştır. Ancak Nokia 3650 gibi ilk nesil S60 cihazlarda kmidrun.exe, Java desteğinin ayrılmaz bir bileşeni olarak varsayılan şekilde her cihazda bulunur. Kısacası, bu dosya orijinaldir ve üçüncü parti yazılımlarla gelmez – aksine üçüncü parti Java uygulamalarının çalışmasına olanak tanıyan sistem düzeyindeki bir araçtır.
Kmidrun.exe dosyasının kendisi, bilinen bir güvenlik riski veya kötü amaçlı yazılım olarak görülmez. Aksine, telefonun normal Java çalıştırma mekanizmasının parçasıdır. Mevcut antivirüs kayıtlarında veya güvenlik bültenlerinde doğrudan kmidrun.exe’yi hedef alan bir mobil zararlı yazılım tespit edilmemiştir. Symbian OS dönemindeki kötü amaçlı yazılımlar (özellikle 2004-2006 yıllarında ortaya çıkan Cabir, Skulls, CommWarrior gibi tehditler), genellikle SIS kurulum dosyaları üzerinden yayılan solucanlar veya truva atlarıydı. Bu zararlılar, sistemdeki uygulamaların çalışmasını engellemek için bazı kritik dosyaları değiştirebiliyordu (örneğin SymbOS/Skulls truva atı, telefondaki uygulama simgesi dosyalarını ve bazı sistem uygulamalarını etkisiz hale getirecek şekilde değiştirmesiyle ünlüdür). Ancak kmidrun.exe’nin ROM’da yer alması ve doğrudan kullanıcı tarafından erişilememesi sayesinde, bu tür zararlılar tarafından birebir hedef alınması pek mümkün değildi – zira ROM bölgesindeki orijinal dosyalar kalıcı ve korumalıdır.
Elbette, herhangi bir Java MIDlet kötü niyetle yazılabilir ve telefonda çalıştırılırsa, kmidrun.exe onu da çalıştıracaktır. Bu durumda risk, kmidrun.exe’den değil, çalıştırılan Java uygulamasının kendisinden kaynaklanır. Java MIDP 1.0 ortamı güvenlik modeli olarak oldukça kısıtlıdır (örneğin dosya sistemine veya telefondaki hassas API’lere doğrudan erişemez, ağ iletişimi kullanıcı izni olmadan kısıtlıdır), bu yüzden bir MIDlet’in verebileceği zarar da sınırlıydı. Özetle, kmidrun.exe ile ilişkilendirilen spesifik bir güvenlik açığı veya kötüye kullanım kaydı bulunmamaktadır. Kullanıcılar, bu dosyanın telefonda bulunmasını bir virüs belirtisi olarak görmemelidir – aksine dosyanın yokluğu, Java uygulamalarının çalışmayacağı anlamına gelir. Yine de genel bir ilke olarak, güvenilmeyen kaynaklardan gelen Java uygulamalarını yüklememek, potansiyel riskleri önlemek açısından önemlidir (zira kmidrun.exe masum bir aracı olsa da, onun çalıştırdığı Java kodu istenmeyen davranışlar sergileyebilir).
Kmidrun.exe, doğrudan son kullanıcı arayüzünde görünen bir uygulama değildir; ancak arka planda tüm Java MIDlet uygulamalarıyla doğrudan ilişkilidir. Nokia 3650’de çalıştırılabilen Java oyunları, yardımcı programlar veya servisler (ör. Java tabanlı mesajlaşma yazılımları, basit araçlar, vs.) kmidrun.exe vasıtasıyla çalıştırılır. Örneğin, Nokia 3650’de yüklü gelen veya sonradan yüklenmiş olabilecek Java oyunları (Snake EX gibi bir oyun eğer Java ME ile yazılmışsa) ya da Opera Mini tarzı Java tabanlı uygulamalar bu yürütücü sayesinde açılır. Kullanıcı, telefon menüsünden bir Java uygulamasının simgesine tıklayıp çalıştırdığında, Symbian OS arka planda kmidrun.exe için bir süreç oluşturur ve ilgili MIDlet’in jar/jad dosyasını ona parametre olarak vererek uygulamayı başlatır.
Ayrıca Symbian’ın Uygulama Yöneticisi (App Manager) veya Java Uygulama Yükleyicisi de kmidrun.exe ile dolaylı olarak etkileşir. Bir .jar dosyasını telefona yüklediğinizde, sistem Java MIDlet’i kaydeder; ardından o MIDlet’i çalıştır seçildiğinde kmidrun devreye girer. Özetle, kmidrun.exe bütün Java uygulamalarıyla birlikte çalışır – bir nevi Java uygulamaların “ortak motoru”dur. Bunun dışında, kmidrun.exe’nin Symbian içinde başka bir uygulamayla spesifik bir işlevi yoktur; örneğin medya oynatıcı, rehber vb. yerel uygulamalar kmidrun.exe’yi kullanmaz. Sadece Java ME platformunda yazılmış uygulamalar bu bileşene ihtiyaç duyar. Bu nedenle, kmidrun.exe’nin çalıştığını genellikle yalnızca bir Java oyun/app açtığınızda (arka planda) görürsünüz; uygulama kapandığında kmidrun.exe süreci de sonlanır.
Nokia 3650’ye özgü olan kmidrun.exe, aslında tüm Symbian S60 1st Edition cihazlarda bulunan bir dosyadır. Nokia 7650 (ilk Symbian S60 telefonu), N-Gage ve N-Gage QD, Siemens SX1 gibi Symbian OS 6.1 tabanlı Series 60 cihazların hepsi Java MIDP 1.0 desteğiyle birlikte gelir ve kmidrun.exe veya eşdeğer bir yürütücü barındırır. Dolayısıyla kmidrun.exe, Nokia 3650’ye özel bir dosya olmaktan ziyade o nesil Symbian akıllı telefonlarının genel bir parçasıdır. Hatta Symbian OS 7.0 kullanan erken S60 2nd Edition cihazlarda (örneğin Nokia 6600) da benzer bir Java çalışma zamanı vardır, ancak ikinci nesilde Java uygulamaları sistemde farklı bir şekilde entegre edilmiştir. Chinese Symbian forum kaynaklarına göre, S60 2nd Edition’da Java MIDlet’ler ayrı bir uygulama olarak yüklendiği için kmidrun yönteminin yerini başka bir yöntem almıştır. Nitekim, S60 2nd Edition cihazlarında her bir MIDlet, C:\System\Apps\{UID}.app şeklinde bir uygulama kaydıyla görünür ve doğrudan o uygulama çağrılarak Java başlatılır. Yine de, bu cihazların ROM’larında da muhtemelen MIDP yürütme bileşenleri (örneğin midp2.exe veya benzeri) bulunmaktadır.
Symbian OS 9 tabanlı S60 3rd Edition (2005 ve sonrası cihazlar) ile birlikte Java ME altyapısı yenilenmiş ve kmidrun.exe yerine JavaLauncher.exe gibi farklı isimli bir yürütücü kullanılmaya başlanmıştır. Ancak bu, konseptin devamı niteliğindedir – amaç yine Java MIDlet’leri başlatmaktır, sadece güvenlik modeli (uygulamaların imzalanması, sandbox özellikleri) ve dosya konumu (artık Z:\sys\bin altında olabilir) değişmiştir. Özetle, kmidrun.exe Symbian OS 6.1 dönemine özgü bir bileşendir, ve onu Nokia 3650 haricinde aynı nesil diğer Symbian cihazlarda da görmek normaldir. Daha yeni cihazlarda ise isim veya konum değişse de benzer bir Java yürütme mekanizması her zaman bulunur (çünkü Java ME desteği Symbian’ın önemli bir özelliğiydi).
Teknik açıdan kmidrun.exe, Symbian OS tarafından ayrı bir süreç olarak çalıştırılan bir yürütülebilir programdır. Bir Java MIDlet çalıştığında, kmidrun.exe işlemi Symbian’in proses listesinde görünür (genellikle sistem araçlarıyla veya hata ayıklama yapılıyorsa görülebilir). Bu süreç, Java sanal makinesini ve MIDlet kodunu içerdiğinden, bellek kullanımı çalıştırılan uygulamaya bağlı olarak değişir. Nokia 3650 gibi cihazların kısıtlı RAM’e sahip olduğu göz önüne alındığında (bu telefonun birkaç megabayt düzeyinde kullanılabilir RAM’i vardır), kmidrun.exe ve içindeki Java VM, bellek kullanımını optimize edecek şekilde tasarlanmıştır. Örneğin, tipik bir MIDlet için KVM’nin yığın (heap) boyutu cihaz tarafından sınırlandırılır – büyük uygulamalarda bellek hataları görülmesinin sebebi de budur. Symbian’ın yürütülebilir dosya formatında her program için minimum/maksimum heap ve stack boyutları tanımlanır; kmidrun.exe’nin bu değerleri, Java uygulamalarına yeterli bellek alanı sağlamak üzere ayarlanmıştır (genellikle birkaç yüz kilobayt ile birkaç megabayt arasında). Nitekim MIDP 1.0 profilindeki cihazlarda tipik olarak jar dosyası boyutu ve bellek kullanımı konularında pratik sınırlar vardı.
Kmidrun.exe bir MIDlet’i başlatırken, komut satırından aldığı parametrelerde ilk argüman olarak bir TCP/IP port numarası da bulunmaktadır. Varsayılan olarak 7049 portunun kullanıldığı görülmektedir. Bu port numarası, Java uygulamasının debug (hata ayıklama) veya ağ üzerinden bir iletişim mekanizması için rezerv edilmiş olabilir – örneğin, bazı cihazlarda uzaktan Java debugger’ı KVM’ye bu port üzerinden bağlanabilmektedir. Aynı zamanda MIDlet PushRegistry (arka planda çalışan MIDlet’lerin belirli portlar üzerinden tetiklenmesi özelliği) için de port tanımlaması söz konusudur. Ancak port 7049’un özellikle debug amacıyla seçildiği Nokia forumlarındaki kod örneklerinden anlaşılmaktadır. Kullanıcı açısından bu teknik detay genellikle görünmezdir, ancak geliştirici bakış açısından kmidrun.exe’nin komut satırı arayüzü bu şekildedir.
İşlem izlemesi yapıldığında, kmidrun.exe’nin ömrü MIDlet çalıştığı sürece devam eder. MIDlet kapandığında kmidrun.exe süreci de kendisini sonlandırır ve belleği geri verir. Bu tasarım, Symbian’ın sağlam çoklu görev yapısıyla uyumludur: her Java uygulaması izole bir süreçte çalıştığı için, bir MIDlet’in çökmesi diğer uygulamaları doğrudan etkilemez – en fazla kmidrun.exe süreci hata alıp kapanabilir, bu da ilgili Java uygulamasının kapanması demektir.
Performans açısından kmidrun.exe ve KVM, o dönemin kısıtlı donanımı için optimize edilmiştir. Java kodu yorumlayıcı (interpreter) veya JIT olmadan çalıştığından, yerel C++ uygulamalara kıyasla daha yavaştır, ancak küçük MIDlet’ler için kabul edilebilir performans sunar. Bellek kullanımında da benzer biçimde, Java uygulaması kullanmadığınız zaman kmidrun.exe yük altında olmaz, yalnızca ihtiyaç halinde çalışır. Örneğin, arka planda açık bir Java uygulamanız yoksa kmidrun.exe işlemciyi veya RAM’i meşgul etmez. Bu nedenle, Nokia 3650’nin sınırlı donanımında bile birden fazla küçük Java uygulamasını (multitasking olmasa da sırasıyla) kullanabilmek mümkündü.
Sonuç olarak, kmidrun.exe teknik analizlerde Java sanal makinesinin başlatıcısı olarak tanımlanabilir. İşletim sistemi seviyesinde, belirli parametrelerle çağrılan ve MIDlet’in çalışmasını sağlayan bir süreçtir. Onun varlığı, Symbian S60 1st Edition cihazların Java ME kabiliyetini mümkün kılan temel unsurlardandır. Hem bellek yönetimi, hem süreç izolasyonu, hem de parametre arayüzü itibariyle, kmidrun.exe dosyası dönemin akıllı telefonlarında Java uygulamalarını güvenli ve kontrollü bir şekilde çalıştırmaya yarayan kritik bir bileşendir.
Kaynaklar: Symbian/Nokia geliştirici dokümantasyonundaki kod örnekleri ve açıklamalar; Symbian OS ve Java ME teknik incelemeleri. Bu kaynaklar, kmidrun.exe’nin ne olduğu, nasıl çalıştığı ve hangi bağlamda kullanıldığı konusunda ayrıntılı bilgiler sunmaktadır. Bunlara göre kmidrun.exe, Nokia 3650’nin orijinal yazılımının bir parçası olup Java MIDlet’lerin yürütülmesini sağlayan, güvenilir ve gerekli bir sistem programıdır.
kmidrun.exe, Symbian OS tabanlı Nokia Series 60 1st Edition cihazlarda (ör. Nokia 3650) bulunan yerleşik bir Java ME (J2ME) sanal makinesi bileşenidir. Bu dosya, Kilobyte Virtual Machine (KVM) olarak bilinen hafif Java sanal makinesini içerir ve telefonda MIDP uygulamalarını (Java ME tabanlı mobil uygulamalar) çalıştırmak için kullanılır. Örneğin Nokia 3650 telefonunda Java MIDP 1.0 desteği vardır ve kmidrun.exe bu Java uygulamalarının çalışmasını sağlar. Bu mekanizma, Series 60 1st Edition cihazlarda Java MIDlet’lerini başlatmak için kullanılmıştır (daha sonraki sürümlerde Java MIDlet’leri ayrı uygulama süreçleri olarak ele alınmıştır). Kısacası, kmidrun.exe telefondaki Java Micro Edition ortamının kalbidir ve .jar/.jad uzantılı mobil Java uygulamalarını yükleyip çalıştırmaktan sorumludur.
Yukarıdaki analiz, kmidrun.exe dosyasının içeriğindeki metinlerin aslında Symbian S60 1st Edition cihazlardaki Java ME çalışma zamanı ile ilişkili olduğunu ortaya koymaktadır. Bu metinler, Java sanal makinesinin çalışma şekli, desteklediği özellikler ve olası hata durumları hakkında ipuçları verir. Özetle:
Kaynaklar: Bu analizde sunulan bilgilerin bir kısmı, Symbian/Nokia geliştirme dokümanlarından ve cihaz teknik özelliklerinden derlenmiştir. Örneğin Nokia 3650’nin Java MIDP 1.0 desteği olduğu bilinmektedir ve kmidrun.exe’nin cihaz ROM’unda Java KVM olarak bulunduğu geliştirici forumlarında belirtilmiştir. Java ME profilleri hakkında genel bilgiler için bkz. Java ME/MIDP tanıtımı. Bu veriler ışığında, incelenen metinlerin kaynağı ve amacı anlaşılmıştır.
Burada hex ile yaptığım bazı çıkarımlar:
kmidrun.exe
Attemp to use bad class
Attemp to call Invalid Native Method
java/lang/Null/PointerException
java/lang/ArrayIntexOutOfBoundsException
java/lang/ArithmeticException
java/lang/ClassCastException
java/lang/OutOfMemoryError
java/lang/ArrayStoreException
unhandled UndefinedOpcodeException
Unhandled FatalSlotError
Unhandled AbstractMethodError
java/lang/IllegalMonitorStateException
Class not initialised
KILLMENOW
Java Undertaker
Could not find jar directory
midrun.exe
-classpath
-descriptor
-serverid
-midletUid
-jar
\System\Data\midp.rsc
-classpath <path> directories and zip files to search
-descriptor <.jad file> MIDlet app descriptor file to use
<MIDlet class>
-verbose enable class loading information
-debug enable
debugging info
-version
show version info
-help show this message
C:/midpinstapps
C:/midptransapps
com.sun.midp.midlet.Main
-help
-version
Profile Spec : %s
microedition.profiles
Profile Impl : %s %s
devel
full_version
Configuration: %s
microedition.configuration
-verbose
-mx
-classpath
Can't combine
-classpath with jam options
-main
-name
-serverport
-descriptor
Can't combine -descriptor with jam options
-http_proxy
-jar
microedition.profiles
MIDP-1.0
microedition.configuration
CLDC-1.0
microedition.http_proxy
HTTP_PROXY
microedition.encoding
ISO8859_1
ENABLE_CLDC_PROTOCOLS
com.sun.lcdui.deviceCaps
MIDP_DEVICECAPS_IMPL
com.sun.lcdui.eventHandler
MIDP_EVENTHANDLER_IMPL
com.sun.lcdui.inputMethodHandler
MIDP_INPUTMETHOD_IMPL
microedition.locale
wireless.messaging.sms.smsc
Class %s not found
Must provide class name
midlet.protocolpath
com.symbian.midp.io.protocol
com.sun.midp.midlet.scheduler
com.symbian.midp.compatibility.runtime.MIDletExecutor
com.symbian.midp.http.proxy
microedition.platform
Nokia3650
supports.mixing
false
supports.audio.capture
supports.video.capture
true
supports.recording
audio.encodings
encoding=pcm encoding=amr encoding=wav
video.encodings
encoding=yuv420
video.snapshot.encodings
encoding=jpeg encoding=bmp encoding=png
forkThread%02d
ALERT: %s
en fr de
es-ES
it
sv
da-DK
no-NO
fi-FI
pt-PT
tr-TR
is-IS
ru-RU
hu-HU
nl-NL
cs-CZ
sk-SK
pl-PL
sl-SL
tl-PH
bg-BG
hr-HR
et-EE
el-GR
id-ID
lv-LV
lt-LT
ms-MY
ro-RO
sr-YU
uk-UA
j
SMS Datagram
WMA_FILE_ACCESS_MUTEX_NAME
NokiaWirelessMessagingAPIMutex
D:\RegisteredPortFileName.txt
#?Class %s extends final class %s?Interface %s does not extend java.lang.Object
Error verifying class %s
Bad class state
Static class initializer failed
Static initializer::<init>()V<clinit>run
main
([Ljava/lang/String
V
runCustomCode
java/lang/OutOfMemoryError
Bad call to getRawClass
Bad call to getClass
L%s;
Creating primitive array
Bad signature found
Buffer overflow in getStringContentsSafely()
UTCvideo/vnd.nokia.interleaved-multimediaCLDCMIDletExecutor: there can be only oneOutput stream already openedvideo//Illegal start time KVMEventProcessor start failed: Assumed_Canvas_SizeInvalid mode: Null output streamThe requested protocol does not exist midrms.dbno ':' in URLelts[5] = bufferingStartedcom.sun.cldc.i18n.j2se.Default_Writer-midletUidIllegal start day of week Port in useFebsms://pngIllegal end time ConnectionsEventServertuesdayStream closedaudio/x-nokia-rngType is not supportedUS_ASCIINext displayable can't be Alertaudio/midiutInvalid addressISO_8859_1recordStoppedclosedinvalid byte sizeChangedcom.symbian.midp.io.protocol.Connection not open for inputaudio/x-wavSunTransfer-EncodingMalformed Status-Line-inactivityTimeoutGETLast-ModifiedVolumeControlcapture -> cstnanosecond timeout value out of rangeStore open: Invalid AddressVectorEnumeratorfile.iniIllegal month , jmidp_eventsConnectionEndPoint initialization failedwednesdayChunkInputStream: Invalid state = deviceIOException reading reader MIDletAgentTask already scheduled or cancellednot valid content typeencodingNo read()KVMEventProcessorJanmicroedition.encodingCannot receive Message Connection is closedcom.sun.cldc.i18n.j2meEventProcessor start threw: Alert does not accept commandsskip value is negativeIllegal start day of week in month Sun, Illegal end month Negative loop valuerecordErrorMIDletSchedulermdtClass not found in runMIDlet: fridayedtInvalid portMIDletInfrastructureMainArray index out of range: .TimeZoneImplmondayLeftMIDlet-Non-positive period.com.sun.tck.midp.javatest.agent.MIDletAgentConnectiondevice://midiMIDlet-Icon-jar-server:id=POSTNegative initial size: IOException writing writer audio/x-tone-seqfalseHEADMIDlet HashtableEnumerator-jadnovember'chunk' not CRLF terminatedPSTcapture://videoConnection is closedstoppedjpegbinaryThu, pmjavax.microedition.media.control.VideoControl greater than Character.MAX_RADIXType not supportedpartial characterstorageEnd keyEPOC error: MIDletEventQueueThreadmayIllegal end day com.sun.cldc.io.j2mekey can't be null > endOfMediawidthdeviceAvailablehttpInvalid mode Exception ThrownUTF8Connection not open for outputContent-LengthLocator already set on DataSource.-testinggmtaudio/amrCouldn't find resourceServer start NYIThunullreset() not supportedrecordStartedstoppedAtTimetimeout value is negativejava.lang.Object_InternalEncodingNameJunJulUpclass augustdurationUpdatedRecordStore initialization failed Input stream already openedSTUB: ThreadExtensions.stop()GSM: copyrightjavax.microedition.media.control.GUIControlTue, .ProtocolIllegal end day of week in month Maycom.sun.cldc.i18n.j2se.Default_ReaderContent-TypeEncoding UTMarIllegalAccessException Datekey can't be emptyStatus = _Writerdevice://toneevents: function not implementedmark/reset not supportedIllegal end day of week usage: MIDletMain midletName <options>Port rangepdtfebruarycloseExecutorServercom.sun.midp.io.j2meinvalid Message CenterContent-Encodingjavax.microedition.media.control.VolumeControlClear keyFailed to find RecordStore class: fpsSocketFactory._initialize() failedSat, -serverSend keyFridateMIDletExecutorServerjanuarysetRequestMethod: Invalid request method < 0MIDletThreadGroupRootcom.sun.cldc.i18n.Helper.i18npathNo openOutputStreamConnection has been closedMalformed HeaderAddress is nullHostInvalid address or port This method is not supported in com.nokia.mid.ui.FullCanvasstartedrngABC keyDecutcHttpFactory._initialize() failedsaturdayTimer already cancelled.Fail To send MessageName too longClassCastException HTTP-Version Mismatch: javax.microedition.lcdui.Itemc:\system\apps\class-nameidRightNovmstIllegal start day -MIDletConstructorThreadSound is not supported-serveridBad gain valueestjavax.microedition.rms.RecordStorebmpsrcBegin > srcEndIllegal start month OkPort: jmidp_lcduiCannot listen on client connectionj2memark() not supportedInstantiationException errorjuneMon, Data is nullseptemberAugIllegal execution time.Alert does not accept listeners.CalendarImpl less than Character.MIN_RADIXCould not find default timezoneIllegal Capacity: javax.microedition.media.control.ToneControljavax.microedition.media.control.microedition.timezoneevents:No write()jmidp_rmsmicroedition.configurationjulyToolkit.checkError: error codeFunction not supportedCannot read on client connectioninterface trueaudio/sp-midiIllegal DST savingsoctobersp-midicdtInvalid URI: Port not allowedSepWedNull URLNull URIDownbufferingStopped3gpnim-MIDletThreadGroupMissing default encoding Writing to closed ByteArrayOutputStreaminvalid first byte MIDletExecutor: JSTGMTmicroedition.implpathdecemberENABLE_CLDC_PROTOCOLSwavInvalid MIDlet class for Negative delay.}height{Message Type is not supportedUnexpected end of streamISO8859_1.util.javax.microedition.media.control.StopTimeControltitle_ReaderdeviceUnavailableradix MIDP lifecycle does not support system exit.Invalid 'chunk' header: no size specifiedMIDlet-2Unsupported 'Transfer-Encoding' not validOctUTF_8cpstvideo/3gppNo openInputStreamSelect key]\[AprNo such MIDlet: TueaprilMon >= Bad duration value, must be 1-10000000textBad frequency value, must be 0-15000PDTamrMIDletExecutor.setCurrent: Internal ErrorCould not create Player@?Fri, chunked=com.sun.cldc:march987Invalid port numberString index out of range: Sat0amExpires/Wed, .Thread[@Record store closed,authorthursdayConnection is closed while waiting for message volumeChanged not foundcom.symbian.midp.http.proxyCannot find case converter class Failed to create lcdui event server: javax.microedition.lcduiIs destroyedcom.symbian.mip.io.MIDPConnector: Initialization failed - 00microedition.caseConvertersundaycom.sun.cldc.i18n.uclc.DefaultCaseConverterdummy.jar
_drawPolygon
CV
RESUME_MIDLET
_getPixelsShort
InterruptedException
setPriority0
iNativePixelFormat
_drawImage
year
j2me
setARGBColor
Hashtable
getOutput
getDay
Exception
FILLTRIANGLE
intern
wait
_setColor
DateParser
InputStream
getDefault
Class
target
second
enableAllProtocols
setDate
DEFAULT_LINE_BUFFER_SIZE
_drawBitmapShort
HMASK
tzoffset
getClass
readUTF
getBaselinePosition
computeJulianDay
floorDivide
getResourceAsStream
_createTextBox
setRequestMethod
weekday_shorts
getProtocol
equals
E_PRIVATE_DATA_AVAILABLE
getMessage
registeredFinalize
javax/microedition/midlet
javax/microedition/media
EMPTY_ARGS
<IV><init>
fillPolygon
IZ
com/sun/cldc/i18n/j2me
day
iRequestMethod
getTime
MIDletScheduler$Queue
GraphicgetMIDletClassName
hashCode
HTTP_PARTIAL
getAlphaComponent
printStackTrace0
avax/microedition/lcdui
ensureConnected
isEmpty
stopMIDlet
drawPolygon
Object
getDirectGraphics
setAddress
CLDCMIDletSuite
iHandle
iAlphaComponent
invokeDestroyApp
getHeaderFieldInt
HTTP_PAYMENT_REQUIRED
DirectGraphicsImpl
invokeStartApp
drawTriangle
main
HTTP_BAD_METHOD
_getPixelsInt
HTTP_USE_PROXY
getMinute
RuntimeException
INI_EXTENSION
DEFAULT_PATH
handlePolygonError
Enumeration
Alert
NORM_PRIORITY
ttb
String
KErrIllegalArgumentException
position
_drawBitmapByte
IMAGEMASK
javax/microedition/rms
isAlive
makeServerArgs
setRecord
com/symbian/lcdjava/io
getYear
toString
IZ
days_in_month
loadMIDletClass
setLength
reset
handlePixelError
HTTP_SEE_OTHER
KErrArrayIndexOutOfBoundsException
millisPerHour
scheduleMIDlet
Context
getContentDescriptor
MessageListener
BLOCKED
_getNativePixelFormat
iGraphics
setColor
shutdown
removeCommand
END_OF_STREAM
CRLF
awaitCompletion
threadQ
setPriority
java/util
createTextField
checkAnchor
HTTP_TEMP_REDIRECT
index
sleep
readBoolean
getHeight
yield
Connection
-drawImage
Displayable
drawPixels NUM_DAYS getDate
iLength
com/sun/midp/io
LEAP_NUM_DAYS
iStyle
setSize
MIN_VALUE
hour
detailMessage
KErrNullPointerException
MIDletInfrastructureThread
iMode
KErrWrite
iHttpProxyPort
MultiMIDletScheduler
checkBufferCapacity
Connector
RecordStoreNotFoundException
HTTP_CONFLICT
open
HTTP_GONE
Main
notifyIncomingMessage
writeBuffer
getHeaderFieldKey
Image
MIN_PRIORITY
raiseExitDialog
writeBoolean
HTTP_FORBIDDEN
month
iMidlets
backtrace
unloadClasses
notifyAll
HTTP_NOT_AUTHORITATIVE
notify
iTicker
JAN_1_1_JULIAN_DAY
KError
createImage
getDefaultFont
isSingleBit
com/symbian/lcdjava/lang
Runnable
activeCount
MIDEventHandler
SERVER_NAME
File
fillTriangle
getAppProperty
java/lang
HTTP_CLIENT_TIMEOUT
IV
flush
HTTP_BAD_GATEWAY
writeChars
run
printStackTrace
invokePauseApp
DirectUtils
HTTP_UNAUTHORIZED
ToolkitHandle
isPlain
ISO8859_1_Writer
Hashtable$HashtableEnumerator
Type
com/symbian/midp/io
HTTP_PROXY_AUTH
HTTP_UNAVAILABLE
insertElementAt
getThreadGroup
Queue
addElement
getFile
MIDletExecutorServer
start
com/sun/midp/midlet
Server
getHeaderField
getRequestMethod
outputStreamClosed
com/symbian/cldc/net
startMIDlet
stop
setTimeZone
com/sun/cldc/
_start
cldcRoot
write
_getSize
InternalConnector
Status
ChoiceComponent
launch
DirectGraphics
getAddress
Reg
DATE_TIME
MIDletInvoker
createVideoItem
toUnsignedString
CHUNKED_TRANSFER_ENCODING
iDevice
inputStreamClosed
HTTP_REQ_TOO_LONG
_pollExitDialog
setRequestProperty
RecordStoreException
setRate
makeDataOutputStream
getHour
FACE_PROPORTIONAL
_getPixelsByte
elements
openInputStream
getEncoding
load
getProperty
ReplyHeaders
getCurrentMIDlet
isShown
HTTP_UNSUPPORTED_RANGE
NO_SUCH_MIDLET
HTTP_RESET
HTTP_NOT_ACCEPTABLE
hasMoreElements
_findMIDletClassName
getSize
toLowerCase
_createDirectGraphicsImpl
getVersion
openInternal
group
VMASK
Invoker
exceptionThrown
PIN_CHUNK
readLine
startTime
MIDletScheduler
_create
_call******ly
REQUEST_HEADERS_SENT
Item
startMonth
LineBufferLength
addHeader
DOT
removeAllElements
pauseMIDlet
setInvoker
DEFAULT_MIDLET_NAME
seek
isItalic
HTTP_NOT_FOUND
COMMA
_baseline
isDisposed
ensureCapacity
HTTP_LENGTH_REQUIRED
Ticker
openPrim
elementAt
getDevice
CommandListener
connect
currentThread
getMIDletCount
javax/microedition/
contains
getRecordIds
com/nokia/mid/ui
_setLabel
readStatusLine
STOPPED
DRAWTRIANGLE
lock
ThreadProxy
QuartzMessageConnection
getIPv4Address
Listeners
getOffset
getIDs
TextComponent
Date
getHeaderFieldDate
removeElement
System
ID_ARG_NAME
toHexString
NAME_EKeyLeftArrow
(:
ThreadGroup
deleteRecord
getURL
enqueue
substringWidth
RequestProperties
EmptyStackException
TimeZoneImpl
openConnection
HTTP_MOVED_TEMP
_redrawList
handleCurrent
julianDayOffset
getNextRunnableMIDlet;
CLDCMIDletClassLoader
Command
addMidlet
ClassLoader
Calendar
INVALID_STATE
join
getMIDletInvoker
checkValues
QuartzMessageConnection$AddressInformation
CIIV
HTTP_NOT_IMPLEMENTED
internalParse
_drawBitmapInt
Display
createAVideoItem
identityHashCode
NOT_INITIALIZED
EKeyGameC
intValue
com/symbian/midp/io/protocol/http
getMonth
getAssumedHeight
sizeOf
getProperty
julianDayToMillis
Handle2
HTTP_EXPECT_FAILED
Object
HEAD
size
getSelectedIndex
Toolkits
parse
local_tz
indexOf
IconName
CONTENT_ENCODING
sInvokerInstance
getCommand
MIDletInstance
Thrown
******
DataInputStream
VideoItem
openDataInputStream
NoSuchElementException
getNativePixelFormat
soundStateChanged
getPixels
com/symbian/midp/compatibility/runtime
Vector
month_shorts
MidletInstance
getHost
MIDLET_PREFIX
getPriority
stringWidth
ut
<clinit>
initProxy
getFace
makeDataInputStream
MMAInvoker
QUESTION_MARK
HTTP_CREATED
_run
MIDletStateChangeException
ERROR
END_OF_CHUNK
ConnectionNotFoundException
HttpProxyHost
ByteArrayOutputStream
booleanValue
DataOutputStream
Size
SourceStream
LEFT
addCommand
SoundListenerImpl
Name
exitInternal
THREAD_NAME
ArithmeticException
Display
DOW_GE_DOM_MODE
forward
lastElement
MIDlet
Next
ASCII
destroy
MINIMUM_STATUS_LINE_LENGTH
lastIndexOf
BUFFER_LENGTH
com/sun/cldc/io
endTime
pointerPressed
ensureCapacityHelper
getContentLength
Ref
Mutable
EXCEPTION_THROWN
HOME_ID
StringItem
getDisplay
MIDletClassLoader
iMIDletInstance
CHUNKED
FBold
Toolkit
_setTitle
priority
MIDLET
getSecond
parseDate
REPLY_RECEIVED
;initDisplayMode
<III= iServerCount>
HTTP_BAD_REQUEST
MAX_PRIORITY
DESTROY_MIDLET
CONTENT_TYPE
CLDCMIDletExecutorServer$RequestQueue
writeUTF
current
_createGraphics
ChoiceType
SIZE_MEDIUM
MIDletState
HTTP_OK
NotExp
iStop
VOLUME_CONTROL
entry
elementCount
NAME_EKeyShift
minute
HTTP_ENTITY_TOO_LARGE
iTableCacheHandle
STYLE_UNDERLINED
getGameAction
shortValue
setCurrentMIDlet
Font
TimerTask
_getRecordSize
setColorValues
getResponseMessage
getStyle
readChar
CLOSE
getLabel
getRef
handleEvent
APP_DIR
this
charsWidth
MIDletSecurityPolicy
MIDletMain
VideoPlayerHandle
getRequestProperty
capacityIncrement
getSound
pollExitDialog
createView
com/symbian/epoc/events
getMaxSize
midpRoot
setElementAt
elementData
SETUP
packed_time
hasPreviousElement
getInputStream
HTTP_VERSION
iHead
EXPIRES
getText
exit
<readTrailer
iIOMonitor
firstElement
SIZE_SMALL
FLIP_HORIZONTAL
getRawOffset
lN
access$000
EN
ContentConnection
access$002
CLOSED
HttpConnection$PlainDataOutputStream
STYLE_TOTAL
setSelectedFlags
APRIL
HTTP_INTERNAL_ERROR
MAX_FPS
HTTP_GATEWAY_TIMEOUT
ReplyHeaderKeys
ConnectionBase
Manager
STOPPED_AT_TIME
KEY_SEND
width
setPitch
EKeyDownArrow
ClassExtensions
getIPv6Address
HTTP_ACCEPTED
MessageConnection
getData
removeElementAt
KEY_NUM6
VERSION_LENGTH
Face
getAttributeValue
getExpiration
GAME_C
setTicker
decodeRules
Thread
after
openOutputStream
staticMonthLength
Control
setString
directGraphics
SIZE_LARGE
STYLE_ITALIC
_handleAddition
iDateWrapper
ImageElements
XScharWidth
delete
STYLE_PLAIN
makeScheduler
getAssumedWidth
JAVA_EPOCH_YEAR
defaultZone
com/sun/cldc/util
milli
getLevel
OutputStream
Protocol
setMute
ensureBuffer
Initialized
POST
createList
HttpConnection
timezones
getImage
writeChar
VERSION
KErrDisconnected
currentTimeMillis
UcPsetPosition
KNoError
writeShort
HTTP_MOVED_PERM
INITIAL_STATE
writeLong
Form
commandAction
REQUEST_SENT
isMuted
writeBufferSize
MIDletSuite
createInvoker
DataOutput
ensureOpen
setText
AssumedHeight
KErrNotFound
throwIOException
ET
getLength
SecurityException
iMidletClass
FramePositioningControl
table
StringElements
getMediaTime
getResponse
HASH
err
close
NAME_EKeyGameC
SMSMessage
endDay
iAllValid
TimeZone
Executor
checkItem
_resumeTicker
DEVICE_UNAVAILABLE
addRecord
Uri
initialize
skip
Disposed
HTTP_PRECON_FAILED
RMS_DB_NAME
InputStream
StoreObjectsTotal
mapTimeToFrame
readShort
setToBeDisposed
AlertType
ISO8859_1_Reader
_height
MIDComponent
SETFONT
resumeMIDlet
setCharsIPv4Address
closing
postEvent
longValue
getTicker
List
_disposeObject
millisPerDay
zone
getState
RecordStoreNotOpenException
getString
HTTP_NOT_MODIFIED
PrintStream
PAUSED
Toolkit$MidletExit
append
insert
isUnderlined
IndexOutOfBoundsException
startServer
AgetMIDletUid
getType
checkValue
Midlet
_createImageItem
OPEN
LineLength
SNAPSHOT_FORMAT_STRING_BMP
setInputMode
ImageBuffer
FACE_SYSTEM
KEY_SOFTKEY
toOctalString
VideoItem
SourceStream;
expandZeroes
setConstraints
getDisplayableHandle
BLOCK_START
buf
Running
KEY_UP_ARROW
START_MIDLET
_repaint
removeRecordListener
PAINT
threshold
Title
keys
mResponseMessage
writeBytes
COMMAND
Datagram
host
setPhoneNumber
IN_LOOP
TimeZoneImplementation
Ta
DateField
HTTP_MULT_CHOICE
Boolean
prefetch
HttpConnection$Constant
readUnsignedShort
PROPERTIES_START
MAY
Canvas
getDate
State
MIDletExecutor$MIDletConstructorThread
IsIPv4
IsChoiceGroup
StopTime
RUNNABLE
CONNECTION
getChars
OutputStream
setProgram
CLASS_ROOT
repaint
KEY_RIGHT_ARROW
path
com/nokia/mid/messaging
createForm
NAME_EKeyClear
DRAWRECT
_createVideoItem
Chatgpt 5 araştırması
Harika döküm almışsınız. Bu metinler, Z:\System\Programs\kmidrun.exe ikili dosyasının içindeki sabit (gömülü) yazı dizileri. Kısaca: bunlar Java ME (J2ME) çalıştırıcısının, hata mesajlarının, komut satırı bayraklarının, sistem özelliklerinin ve aygıt yeteneklerinin ipuçlarını veriyor. Aşağıda gruplandırıp ne anlama geldiklerini özetliyorum.
Symbian Series 60 aygıtlarında (Java ME ve MIDP ortamında) yüklenen kmidrun.exe, MIDlet’leri çalıştıran sistem yürütücüsüdür. Dosyanın hex çıktısındaki metinler, MMAPI ve MIDP/CLDC özelliklerini tanımlayan sabit mesaj dizileridir. Aşağıdaki tablolar ve açıklamalar bunların kökenini açıklar.
Linkler:
Ben Beyaz Şapkalı Lamer olduğum için böyle şeylere çok merak salıyorum
Nokia 3650’de Z:\System\Programs\kmidrun.exe Dosyasının Teknik Analizi
Sistem Bileşeni ve Kökeni
kmidrun.exe, Nokia 3650’nin sistem ROM’unda (Z:\System\Programs\kmidrun.exe) bulunan ve Symbian OS Series 60 1st Edition’da yer alan bir yürütülebilir dosyadır. Bu dosya, telefonun Java MIDP (Mobile Information Device Profile) çalışma zamanının bir parçasıdır. Özellikle, Symbian OS 6.1 tabanlı Series 60 platformunda sağlanan Sun Microsystems KVM (Kilobyte Virtual Machine) adlı Java sanal makinesine ait bir bileşendir. Geliştirici dokümanlarında “KVM sanal makine konumu (ROM sürücüsünde)” olarak anılmakta ve doğrudan ROM içindeki kmidrun.exe dosyasına referans verilmektedir. Bu konum, dosyanın cihaz yazılımına (firmware) dahil orijinal bir parça olduğunu, sonradan yüklenmiş bir uygulama olmadığını gösterir. Başka bir deyişle, kmidrun.exe Symbian işletim sisteminin ve Nokia’nın Series 60 Java desteğinin dahili bir bileşenidir; kullanıcının elle yüklediği üçüncü parti bir yazılım değildir. Z:\ sürücüsü yalnızca üretici firmware’i tarafından değiştirilebilir olduğundan, bu dosya telefonun fabrika yazılımının bir parçasıdır ve kullanıcı tarafından kaldırılamaz ya da değiştirilemez.
İşlevi (Ne İşe Yarar?)
kmidrun.exe dosyasının temel işlevi, Java MIDlet olarak adlandırılan Java uygulamalarını çalıştırmaktır. Nokia 3650 gibi Symbian S60 1st Edition cihazlarda, bir J2ME (Java 2 Micro Edition) uygulaması başlatılacağı zaman, sistem arka planda kmidrun.exe sürecini kullanarak ilgili Java uygulamasını yükler ve yürütür. Bu yürütücü, gerekli parametreleri alarak Java sanal makinesini başlatır ve MIDlet kodunu çalıştırır. Teknik dokümanlar, bir MIDlet’in kmidrun.exe aracılığıyla nasıl başlatıldığını detaylandırmaktadır: Yeni bir sanal makine süreci oluşturulur ve çalıştırılacak MIDlet’e dair bilgiler bu sürece komut satırı parametreleri olarak aktarılır. Bu parametreler arasında MIDlet için ayrılmış bir TCP/IP port numarası, MIDlet’in benzersiz UID değeri, MIDlet adı ve MIDlet’in .jar ile .jad dosyalarının tam yolları bulunur; tümü belirli bir formatla, * karakteri ile ayrılarak iletilir. Kmidrun.exe bu bilgileri alarak Java sanal makinesini başlatır ve belirtilen MIDlet’i çalıştırır. Özetle, kmidrun.exe Java uygulama başlatıcısı görevi görür – bir Java oyun, araç veya diğer MIDP tabanlı uygulamayı açtığınızda, arka planda bu dosya devreye girerek Java kodunun çalışmasını sağlar.
Symbian OS İçindeki Rolü
Symbian OS mimarisinde kmidrun.exe, Java çalışma zamanının kritik bir parçasıdır ve Java Uygulama Yürütme Ortamı rolünü üstlenir. Series 60 1st Edition cihazlarda (Symbian OS 6.1 üzerinde), MIDP 1.0 profiline uygun Java desteği sunulmuştur. Bu ortamın kalbinde yer alan kmidrun.exe, Java sanal makinesini (KVM) başlatarak Java bytecode’larının çalışmasını mümkün kılar. Symbian OS, mikro çekirdekli ve çok süreçli bir işletim sistemi olduğu için, kmidrun.exe her Java MIDlet için ayrı bir süreç (process) olarak çalışır. Uygulama menüsünde bir Java oyunu veya uygulaması seçildiğinde, sistem o MIDlet’i kmidrun.exe vasıtasıyla yükleyip çalıştırır. Bu sayede Java uygulamaları, Symbian’ın yerel (native) C++ uygulamalarından ayrı bir ortamda izole şekilde yürütülür.
Kmidrun.exe ayrıca Symbian’ın uygulama yönetim altyapısıyla da etkileşim halindedir. Örneğin, Java MIDlet’lerin kurulumu ve başlatılması, Symbian’ın RApaLsSession gibi API’ları ile entegre çalışır. Nokia’nın teknik kaynaklarına göre, Series 60 1st Edition’da bir MIDlet programatik olarak başlatılmak istendiğinde, geliştiriciler RProcess sınıfıyla Z:\System\Programs\kmidrun.exe dosyasını bir süreç olarak yaratıp parametrelerle çalıştırmaktadırlar. Sonuç olarak kmidrun.exe, Symbian OS içinde Java yürütme servisi gibi davranır ve Java platformunun Symbian’a entegrasyonunu sağlar. Bu rol, Symbian OS’in modüler yapısında Java için ayrılmış bir alt sistem olarak düşünülebilir; kmidrun.exe de o alt sistemin çekirdeğidir.
Orijinal mi, Üçüncü Parti mi?
Kmidrun.exe, Nokia 3650’nin üretici yazılımında gelen orijinal bir sistem dosyasıdır. Üçüncü parti uygulamalarla birlikte gelen bir bileşen değildir. Dosyanın Z:\System\Programs dizininde bulunması, onun telefonun salt-okunur ROM’unda yer aldığını ve yalnızca Nokia/Symbian tarafından sağlandığını gösterir. Nitekim, geliştirici kodlarında kmidrun.exe’ye “ROM’daki KVM konumu” şeklinde atıf yapılmıştır. Kullanıcılar normalde bu dosyayı görmez veya doğrudan çalıştırmaz; sistem, Java uygulamaları yönetirken arka planda bunu kullanır. Bu dosyanın varlığı, Nokia 3650’nin Java MIDP 1.0 desteğini kendi içinde barındırdığını, harici bir yüklemeye ihtiyaç duymadığını kanıtlar. Dolayısıyla kmidrun.exe, Nokia ve Symbian’ın orijinal yazılımının bir parçasıdır ve telefonda bulunması normal ve beklenen bir durumdur.
Bir karşılaştırma yapmak gerekirse, daha sonraki Symbian sürümlerinde (S60 2nd Edition ve sonrası) Java MIDlet çalıştırma mekanizması değişmiş; örneğin S60 3rd Edition’da JavaLauncher.exe gibi farklı yürütücüler kullanılmıştır. Ancak Nokia 3650 gibi ilk nesil S60 cihazlarda kmidrun.exe, Java desteğinin ayrılmaz bir bileşeni olarak varsayılan şekilde her cihazda bulunur. Kısacası, bu dosya orijinaldir ve üçüncü parti yazılımlarla gelmez – aksine üçüncü parti Java uygulamalarının çalışmasına olanak tanıyan sistem düzeyindeki bir araçtır.
Güvenlik Riskleri ve Kötüye Kullanım İhtimalleri
Kmidrun.exe dosyasının kendisi, bilinen bir güvenlik riski veya kötü amaçlı yazılım olarak görülmez. Aksine, telefonun normal Java çalıştırma mekanizmasının parçasıdır. Mevcut antivirüs kayıtlarında veya güvenlik bültenlerinde doğrudan kmidrun.exe’yi hedef alan bir mobil zararlı yazılım tespit edilmemiştir. Symbian OS dönemindeki kötü amaçlı yazılımlar (özellikle 2004-2006 yıllarında ortaya çıkan Cabir, Skulls, CommWarrior gibi tehditler), genellikle SIS kurulum dosyaları üzerinden yayılan solucanlar veya truva atlarıydı. Bu zararlılar, sistemdeki uygulamaların çalışmasını engellemek için bazı kritik dosyaları değiştirebiliyordu (örneğin SymbOS/Skulls truva atı, telefondaki uygulama simgesi dosyalarını ve bazı sistem uygulamalarını etkisiz hale getirecek şekilde değiştirmesiyle ünlüdür). Ancak kmidrun.exe’nin ROM’da yer alması ve doğrudan kullanıcı tarafından erişilememesi sayesinde, bu tür zararlılar tarafından birebir hedef alınması pek mümkün değildi – zira ROM bölgesindeki orijinal dosyalar kalıcı ve korumalıdır.
Elbette, herhangi bir Java MIDlet kötü niyetle yazılabilir ve telefonda çalıştırılırsa, kmidrun.exe onu da çalıştıracaktır. Bu durumda risk, kmidrun.exe’den değil, çalıştırılan Java uygulamasının kendisinden kaynaklanır. Java MIDP 1.0 ortamı güvenlik modeli olarak oldukça kısıtlıdır (örneğin dosya sistemine veya telefondaki hassas API’lere doğrudan erişemez, ağ iletişimi kullanıcı izni olmadan kısıtlıdır), bu yüzden bir MIDlet’in verebileceği zarar da sınırlıydı. Özetle, kmidrun.exe ile ilişkilendirilen spesifik bir güvenlik açığı veya kötüye kullanım kaydı bulunmamaktadır. Kullanıcılar, bu dosyanın telefonda bulunmasını bir virüs belirtisi olarak görmemelidir – aksine dosyanın yokluğu, Java uygulamalarının çalışmayacağı anlamına gelir. Yine de genel bir ilke olarak, güvenilmeyen kaynaklardan gelen Java uygulamalarını yüklememek, potansiyel riskleri önlemek açısından önemlidir (zira kmidrun.exe masum bir aracı olsa da, onun çalıştırdığı Java kodu istenmeyen davranışlar sergileyebilir).
İlişkili Olduğu Uygulamalar
Kmidrun.exe, doğrudan son kullanıcı arayüzünde görünen bir uygulama değildir; ancak arka planda tüm Java MIDlet uygulamalarıyla doğrudan ilişkilidir. Nokia 3650’de çalıştırılabilen Java oyunları, yardımcı programlar veya servisler (ör. Java tabanlı mesajlaşma yazılımları, basit araçlar, vs.) kmidrun.exe vasıtasıyla çalıştırılır. Örneğin, Nokia 3650’de yüklü gelen veya sonradan yüklenmiş olabilecek Java oyunları (Snake EX gibi bir oyun eğer Java ME ile yazılmışsa) ya da Opera Mini tarzı Java tabanlı uygulamalar bu yürütücü sayesinde açılır. Kullanıcı, telefon menüsünden bir Java uygulamasının simgesine tıklayıp çalıştırdığında, Symbian OS arka planda kmidrun.exe için bir süreç oluşturur ve ilgili MIDlet’in jar/jad dosyasını ona parametre olarak vererek uygulamayı başlatır.
Ayrıca Symbian’ın Uygulama Yöneticisi (App Manager) veya Java Uygulama Yükleyicisi de kmidrun.exe ile dolaylı olarak etkileşir. Bir .jar dosyasını telefona yüklediğinizde, sistem Java MIDlet’i kaydeder; ardından o MIDlet’i çalıştır seçildiğinde kmidrun devreye girer. Özetle, kmidrun.exe bütün Java uygulamalarıyla birlikte çalışır – bir nevi Java uygulamaların “ortak motoru”dur. Bunun dışında, kmidrun.exe’nin Symbian içinde başka bir uygulamayla spesifik bir işlevi yoktur; örneğin medya oynatıcı, rehber vb. yerel uygulamalar kmidrun.exe’yi kullanmaz. Sadece Java ME platformunda yazılmış uygulamalar bu bileşene ihtiyaç duyar. Bu nedenle, kmidrun.exe’nin çalıştığını genellikle yalnızca bir Java oyun/app açtığınızda (arka planda) görürsünüz; uygulama kapandığında kmidrun.exe süreci de sonlanır.
Diğer Symbian Cihazlarında Mevcut mu?
Nokia 3650’ye özgü olan kmidrun.exe, aslında tüm Symbian S60 1st Edition cihazlarda bulunan bir dosyadır. Nokia 7650 (ilk Symbian S60 telefonu), N-Gage ve N-Gage QD, Siemens SX1 gibi Symbian OS 6.1 tabanlı Series 60 cihazların hepsi Java MIDP 1.0 desteğiyle birlikte gelir ve kmidrun.exe veya eşdeğer bir yürütücü barındırır. Dolayısıyla kmidrun.exe, Nokia 3650’ye özel bir dosya olmaktan ziyade o nesil Symbian akıllı telefonlarının genel bir parçasıdır. Hatta Symbian OS 7.0 kullanan erken S60 2nd Edition cihazlarda (örneğin Nokia 6600) da benzer bir Java çalışma zamanı vardır, ancak ikinci nesilde Java uygulamaları sistemde farklı bir şekilde entegre edilmiştir. Chinese Symbian forum kaynaklarına göre, S60 2nd Edition’da Java MIDlet’ler ayrı bir uygulama olarak yüklendiği için kmidrun yönteminin yerini başka bir yöntem almıştır. Nitekim, S60 2nd Edition cihazlarında her bir MIDlet, C:\System\Apps\{UID}.app şeklinde bir uygulama kaydıyla görünür ve doğrudan o uygulama çağrılarak Java başlatılır. Yine de, bu cihazların ROM’larında da muhtemelen MIDP yürütme bileşenleri (örneğin midp2.exe veya benzeri) bulunmaktadır.
Symbian OS 9 tabanlı S60 3rd Edition (2005 ve sonrası cihazlar) ile birlikte Java ME altyapısı yenilenmiş ve kmidrun.exe yerine JavaLauncher.exe gibi farklı isimli bir yürütücü kullanılmaya başlanmıştır. Ancak bu, konseptin devamı niteliğindedir – amaç yine Java MIDlet’leri başlatmaktır, sadece güvenlik modeli (uygulamaların imzalanması, sandbox özellikleri) ve dosya konumu (artık Z:\sys\bin altında olabilir) değişmiştir. Özetle, kmidrun.exe Symbian OS 6.1 dönemine özgü bir bileşendir, ve onu Nokia 3650 haricinde aynı nesil diğer Symbian cihazlarda da görmek normaldir. Daha yeni cihazlarda ise isim veya konum değişse de benzer bir Java yürütme mekanizması her zaman bulunur (çünkü Java ME desteği Symbian’ın önemli bir özelliğiydi).
Teknik Özellikler (İşlem İzleri, Bellek Kullanımı v.b.)
Teknik açıdan kmidrun.exe, Symbian OS tarafından ayrı bir süreç olarak çalıştırılan bir yürütülebilir programdır. Bir Java MIDlet çalıştığında, kmidrun.exe işlemi Symbian’in proses listesinde görünür (genellikle sistem araçlarıyla veya hata ayıklama yapılıyorsa görülebilir). Bu süreç, Java sanal makinesini ve MIDlet kodunu içerdiğinden, bellek kullanımı çalıştırılan uygulamaya bağlı olarak değişir. Nokia 3650 gibi cihazların kısıtlı RAM’e sahip olduğu göz önüne alındığında (bu telefonun birkaç megabayt düzeyinde kullanılabilir RAM’i vardır), kmidrun.exe ve içindeki Java VM, bellek kullanımını optimize edecek şekilde tasarlanmıştır. Örneğin, tipik bir MIDlet için KVM’nin yığın (heap) boyutu cihaz tarafından sınırlandırılır – büyük uygulamalarda bellek hataları görülmesinin sebebi de budur. Symbian’ın yürütülebilir dosya formatında her program için minimum/maksimum heap ve stack boyutları tanımlanır; kmidrun.exe’nin bu değerleri, Java uygulamalarına yeterli bellek alanı sağlamak üzere ayarlanmıştır (genellikle birkaç yüz kilobayt ile birkaç megabayt arasında). Nitekim MIDP 1.0 profilindeki cihazlarda tipik olarak jar dosyası boyutu ve bellek kullanımı konularında pratik sınırlar vardı.
Kmidrun.exe bir MIDlet’i başlatırken, komut satırından aldığı parametrelerde ilk argüman olarak bir TCP/IP port numarası da bulunmaktadır. Varsayılan olarak 7049 portunun kullanıldığı görülmektedir. Bu port numarası, Java uygulamasının debug (hata ayıklama) veya ağ üzerinden bir iletişim mekanizması için rezerv edilmiş olabilir – örneğin, bazı cihazlarda uzaktan Java debugger’ı KVM’ye bu port üzerinden bağlanabilmektedir. Aynı zamanda MIDlet PushRegistry (arka planda çalışan MIDlet’lerin belirli portlar üzerinden tetiklenmesi özelliği) için de port tanımlaması söz konusudur. Ancak port 7049’un özellikle debug amacıyla seçildiği Nokia forumlarındaki kod örneklerinden anlaşılmaktadır. Kullanıcı açısından bu teknik detay genellikle görünmezdir, ancak geliştirici bakış açısından kmidrun.exe’nin komut satırı arayüzü bu şekildedir.
İşlem izlemesi yapıldığında, kmidrun.exe’nin ömrü MIDlet çalıştığı sürece devam eder. MIDlet kapandığında kmidrun.exe süreci de kendisini sonlandırır ve belleği geri verir. Bu tasarım, Symbian’ın sağlam çoklu görev yapısıyla uyumludur: her Java uygulaması izole bir süreçte çalıştığı için, bir MIDlet’in çökmesi diğer uygulamaları doğrudan etkilemez – en fazla kmidrun.exe süreci hata alıp kapanabilir, bu da ilgili Java uygulamasının kapanması demektir.
Performans açısından kmidrun.exe ve KVM, o dönemin kısıtlı donanımı için optimize edilmiştir. Java kodu yorumlayıcı (interpreter) veya JIT olmadan çalıştığından, yerel C++ uygulamalara kıyasla daha yavaştır, ancak küçük MIDlet’ler için kabul edilebilir performans sunar. Bellek kullanımında da benzer biçimde, Java uygulaması kullanmadığınız zaman kmidrun.exe yük altında olmaz, yalnızca ihtiyaç halinde çalışır. Örneğin, arka planda açık bir Java uygulamanız yoksa kmidrun.exe işlemciyi veya RAM’i meşgul etmez. Bu nedenle, Nokia 3650’nin sınırlı donanımında bile birden fazla küçük Java uygulamasını (multitasking olmasa da sırasıyla) kullanabilmek mümkündü.
Sonuç olarak, kmidrun.exe teknik analizlerde Java sanal makinesinin başlatıcısı olarak tanımlanabilir. İşletim sistemi seviyesinde, belirli parametrelerle çağrılan ve MIDlet’in çalışmasını sağlayan bir süreçtir. Onun varlığı, Symbian S60 1st Edition cihazların Java ME kabiliyetini mümkün kılan temel unsurlardandır. Hem bellek yönetimi, hem süreç izolasyonu, hem de parametre arayüzü itibariyle, kmidrun.exe dosyası dönemin akıllı telefonlarında Java uygulamalarını güvenli ve kontrollü bir şekilde çalıştırmaya yarayan kritik bir bileşendir.
Kaynaklar: Symbian/Nokia geliştirici dokümantasyonundaki kod örnekleri ve açıklamalar; Symbian OS ve Java ME teknik incelemeleri. Bu kaynaklar, kmidrun.exe’nin ne olduğu, nasıl çalıştığı ve hangi bağlamda kullanıldığı konusunda ayrıntılı bilgiler sunmaktadır. Bunlara göre kmidrun.exe, Nokia 3650’nin orijinal yazılımının bir parçası olup Java MIDlet’lerin yürütülmesini sağlayan, güvenilir ve gerekli bir sistem programıdır.
Linkleri görüntülemek için kayıt olmalısınız
Linkleri görüntülemek için kayıt olmalısınız
Linkleri görüntülemek için kayıt olmalısınız
---kmidrun.exe Dosyasının Analizi
kmidrun.exe nedir?kmidrun.exe, Symbian OS tabanlı Nokia Series 60 1st Edition cihazlarda (ör. Nokia 3650) bulunan yerleşik bir Java ME (J2ME) sanal makinesi bileşenidir. Bu dosya, Kilobyte Virtual Machine (KVM) olarak bilinen hafif Java sanal makinesini içerir ve telefonda MIDP uygulamalarını (Java ME tabanlı mobil uygulamalar) çalıştırmak için kullanılır. Örneğin Nokia 3650 telefonunda Java MIDP 1.0 desteği vardır ve kmidrun.exe bu Java uygulamalarının çalışmasını sağlar. Bu mekanizma, Series 60 1st Edition cihazlarda Java MIDlet’lerini başlatmak için kullanılmıştır (daha sonraki sürümlerde Java MIDlet’leri ayrı uygulama süreçleri olarak ele alınmıştır). Kısacası, kmidrun.exe telefondaki Java Micro Edition ortamının kalbidir ve .jar/.jad uzantılı mobil Java uygulamalarını yükleyip çalıştırmaktan sorumludur.
Hex içeriğindeki metinler ve anlamları
Soruda verilen hex incelemesi çıktısında, kmidrun.exe içinde gömülü birçok metin dizgesi görülmektedir. Bunlar, programın çalışması esnasında kullandığı hata mesajları, sistem özellikleri ve benzeri tanımlayıcı metinlerdir. Aşağıda bu metinlerin gruplar halinde açıklamaları yer almaktadır:- Komut satırı kullanımı ve başlatma parametreleri: İlk kısımda görülen midrun.exe, -classpath, -descriptor, -jar, -help, -version gibi ifadeler, kmidrun.exe’nin alabileceği komut satırı argümanlarını gösterir. Bu, geliştiricilere veya sisteme MIDlet uygulamalarını başlatırken gereken parametrelerin sözdizimini açıklayan bir kullanım metnidir. Örneğin, MIDlet çalışma zamanını başlatırken .jad (uygulama açıklama dosyası) ve .jar (uygulama Java arşivi) dosyalarının yolunu verme, sınıf yolunu ayarlama, hatta hata ayıklama modunu (-debug) etkinleştirme seçenekleri olduğu anlaşılıyor. Normalde kullanıcı bu parametreleri doğrudan vermez; bunlar sistem tarafından veya geliştirme ortamında kullanılır. Bu metinler kmidrun.exe’nin nasıl çalıştırılabileceğine dair ipuçları içerir (örneğin "Can't combine -classpath with JAM options" ifadesi, belirli parametrelerin birlikte kullanılamayacağını belirtiyor). Nitekim Symbian C++ ile bir MIDlet başlatmak için kmidrun.exe bir süreç olarak bu parametrelerle çağrılabiliyordu.
- Java ME profili ve yapılandırması: Metinler arasında microedition.profiles, microedition.configuration ve microedition.platform gibi girdiler dikkat çekmektedir. Bunlar, Java ME ortamının sistem özelliklerini temsil eder. Örneğin:
- microedition.profiles: MIDP-1.0 – Cihazın Mobile Information Device Profile (MIDP) 1.0 profilini desteklediğini gösteriyor. MIDP, mobil cihazlar için tanımlanmış bir Java API katmanıdır ve CLDC üzerine inşa edilir. MIDP 1.0 ilk nesil telefonlardaki temel Java işlevlerini tanımlar.
- microedition.configuration: CLDC-1.0 – Cihazın Connected Limited Device Configuration 1.0 kullandığını gösterir. CLDC, kısıtlı kaynaklara sahip cihazlar (telefonlar, PDA’ler vb.) için temel Java kütüphaneleri ve sanal makine özelliklerini tanımlayan bir alt yapıdır. CLDC-1.0 sürümü, MIDP 1.0 ile birlikte o dönemki telefonlarda standarttır.
- microedition.platform: Nokia3650 – Cihaz/platform ismini belirtir. Bu durumda Java runtime, platform olarak kendini “Nokia3650” diye tanıtıyor. Bu sistem özelliği, uygulamaların hangi cihazda çalıştığını anlamaları için kullanılır. Örneğin bir MIDlet, System.getProperty("microedition.platform") çağrısıyla cihazın Nokia 3650 olduğunu öğrenebilir.
- Bu veriler, incelenen dosyanın gerçekten de Nokia 3650 gibi bir cihazın Java ortamına ait olduğunu doğrulamaktadır. Yani kmidrun.exe içindeki bu bilgiler cihazın MIDP/CLDC sürümünü ve kimliğini dışarıya bildirir (Nokia 3650, MIDP-1.0, CLDC-1.0 ortamı).
- Multimedya desteği ile ilgili özellikler: Hex içeriğinde göze çarpan diğer sistem özellikleri:
- supports.mixing – Muhtemelen ses karıştırma desteğini belirtir. Değeri false olarak görülüyor, bu da cihazın birden fazla sesi aynı anda çalma (müzik ve tonları miksleme) özelliğine sahip olmadığını gösterir. Birçok eski telefonda aynı anda tek bir ses akışı destekleniyordu.
- supports.audio.capture – Ses kaydı/yakalama desteğini belirtir. (Değer kısmı net görünmese de, eğer false ise cihazın Java ile mikrofon ses kaydına izin vermediğini, true ise izin verdiğini ifade eder). Nokia 3650’de donanım olarak ses kaydı mümkün olsa da, Java API’si üzerinden ses yakalama o dönemde desteklenmemiş olabilir.
- supports.video.capture: true – Video yakalama (kamera erişimi) desteğinin var olduğunu gösteriyor. Bu, cihaz kamerasının Java tarafından kullanılabildiğine işaret eder. Nitekim Nokia 3650 kameralı bir telefondu ve Java uygulamaları kameraya erişebiliyordu (en azından fotoğraf çekimi olarak).
- supports.recording – Medya akışlarını kaydetme özelliği. Bu özellik, ses/video yakalanırken doğrudan dosyaya kaydedebilme yeteneğini ifade eder. Değerinin ne olduğu tam seçilemiyor, ancak büyük olasılıkla true olabilir (çünkü cihazda video/ses kayıt uygulamaları mevcuttu).
- audio.encodings, video.encodings, video.snapshot.encodings – Cihazın desteklediği medya formatlarını listeler. Örneğin:
- Audio encodings: encoding=pcm, encoding=amr, encoding=wav – Telefonun ses formatı olarak PCM (ham ses), AMR (Adaptive Multi-Rate, telefonda sık kullanılan ses kodeği) ve WAV PCM formatlarını desteklediği yazıyor. Bu, Java’nın MMAPI (JSR-135) üzerinden bu tür sesleri çalabileceğini veya kaydedebileceğini gösterir.
- Video encodings: encoding=yuv420 – Bu, kameradan alınan ham video verisinin YUV420 formatında olduğunu belirtiyor. YUV420, mobil cihaz kameralarında yaygın bir ham veri formatıdır.
- Video snapshot encodings: encoding=jpeg, encoding=bmp, encoding=png – Cihazın kamera anlık görüntü (snapshot) formatlarında JPEG, BMP ve PNG desteği olduğu anlaşılıyor. Yani bir Java uygulaması kamera görüntüsünü yakalarken bu üç formatta çıktı alabilir (muhtemelen en azından JPEG desteği gerçekte vardı, BMP/PNG ise belki yazılım çevirisiyle destekleniyordu).
- Bu özellikler, Java’nın MMAPI (Mobile Media API, JSR-135) için sisteme özel sağlanan yeteneklerdir. Örneğin bir MIDlet System.getProperty("supports.video.capture") çağrısıyla kameraya erişimin mümkün olup olmadığını öğrenebilir. Buradaki değerler Nokia 3650’nin medya yeteneklerine uygundur ve Java ortamının bunları rapor ettiğini görüyoruz.
- Yerelleştirme ve tarih formatları: Verilen metin bloğunda birçok dil ve bölge kodu ile gün/ay isimleri fark ediliyor: en, fr, de, ... tr-TR, ru-RU, it, vb. ile “monday”, “tuesday”, “wednesday”, “jan”, “feb”, “mar”, hatta “PST”, “GMT”, “UTC” gibi zaman dilimi kısaltmaları. Bu veriler, yerelleştirme ve tarih/saat formatlama ile ilgilidir. Özellikle:
- Dil/Bölge Kodları: İngilizce, Fransızca, Almanca, Türkçe (tr-TR), Rusça vs. birçok dilin kodları listelenmiş. Muhtemelen Java ME kütüphanesinin tarih veya metin formatlama işlemleri için bu kodlara ihtiyacı var. Örneğin java.util.TimeZone veya java.util.Calendar (CLDC 1.1 sürümünde sınırlı bir Calendar vardı) gibi sınıflar bu sabit listeleri kullanıyor olabilir. Ya da bu liste, telefonda mevcut dillerin kodları olarak derlenmiş olabilir. (Symbian OS telefonlar çok dilli olduğundan, Java ortamı bunları bilebilir.)
- Gün ve Ay İsimleri: “Mon, Tue, Wed, ... Sun” (Pazartesi... Pazar kısaltmaları) ve “Jan, Feb, ... Dec” (Ocak... Aralık kısaltmaları) ile “Monday, Tuesday, ...”, “January, February, ...” gibi tam isimler metinde görünüyor. Bunlar büyük ihtimalle HTTP tarih başlıklarını çözümlemek veya tarih değeri döndürmek için kullanılıyor. MIDP API’sinde, örneğin bir HTTP yanıtının tarih alanını almak için HttpConnection.getHeaderFieldDate() metodu vardır ve bu, sunucudan gelen tarih string’ini parse edip bir long değeri döndürür. HTTP protokolünde tarih formatları sabittir (örn: "Sun, 06 Nov 1994 08:49:37 GMT" gibi). Bu formatları çözmek için Java uygulaması hafta günlerini (Sun, Mon, ...) ve ayları (Jan, Feb, ...) tanıyor olmalıdır. İşte kmidrun.exe içindeki bu metinler, büyük olasılıkla HTTP tarayıcı/bağlantı uygulamalarının tarih parse işlemleri ve belki genel tarih gösterimi için kullanılıyor. Ayrıca “GMT, PST, EST, CDT, ...” gibi zaman dilimi kısaltmaları da bu bağlamda var – bazı tarih formatları zaman dilimini içerdiğinden, bunları tanıyıp GMT’ye çevirmek gerekiyor.
- Özetle, bu yerelleştirme stringleri kmidrun.exe’nin tarih ve saat işlemleri ile dil desteği konularında içerdiği sabitlerdir. Normal uygulama kullanımında bunlar görünmez, ancak arka planda tarih işlemlerinde kullanılır.
- Ağ ve protokol mesajları: Hex içeriğinde birçok HTTP ve bağlantı ile ilgili metin göze çarpıyor: Örneğin "HTTP_OK", "HTTP_FORBIDDEN", "HTTP_NOT_FOUND", "HTTP_BAD_REQUEST" gibi HTTP durum kodları; "Content-Length", "Transfer-Encoding", "chunked" gibi HTTP başlık terimleri; "SocketFactory._initialize() failed" gibi soket hataları; "Port in use" (port kullanımda), "Connection not open for input/output" (bağlantı girişe/çıkışa açık değil) gibi bağlantı durum mesajları. Bu ifadeler, Java ME’nin Generic Connection Framework (GCF) ve HTTP API’larının kmidrun içinde yer alan uygulamasından gelmektedir.
Örneğin MIDP’de HttpConnection arayüzü HTTP isteği yapmaya izin verir ve HTTP durum kodlarını (200, 403, 404 vs.) döndürebilir. Bu kodlara karşılık gelen sabitler genelde sayısal olsa da, burada metin olarak da bulunuyor. Muhtemelen hata ayıklama veya log amaçlı, ya da istisna mesajlarında bu sabit isimleri kullanılabiliyor. Benzer şekilde "Malformed Status-Line" (bozuk durum satırı) veya "Invalid URI: Port not allowed" gibi ifadeler, URL/HTTP isteklerindeki format hataları için hazırlanmış istisna mesajlarıdır. "no ':' in URL" ifadesi, bir URL string’inde beklenen “:`” karakteri olmadığında (örn. "http//example.com" gibi yanlış format) atılan hatayı tanımlar.
Diğer ağ ile ilgili kısımlardan "ConnectionsEventServer", "ConnectionEndPoint initialization failed" gibi metinler de Java bağlantı altyapısının (örneğin kablosuz mesajlaşma, socket, vs.) hata mesajları olabilir. "Datagram" ve "SMS" geçen bölümler, WMA (Wireless Messaging API, JSR-120) ile ilişkili görünüyor. Örneğin:- "SMS Datagram", "NokiaWirelessMessagingAPIMutex", "RegisteredPortFileName.txt" – Bu parçalar, SMS gönderip alma ile ilgili kütüphaneye ait. Nokia WMA implementasyonu, SMS portları için bir kilit (mutex) mekanizması ve kayıtlı portları tutan bir dosya kullanmış olabilir. Belirli bir SMS portunu (ör. 50000) dinlemek isteyen MIDlet’ler için, NokiaWirelessMessagingAPIMutex ile aynı anda tek bir uygulamanın o porta erişmesini sağlama gibi bir tasarım söz konusu olabilir. "RegisteredPortFileName.txt" muhtemelen D: sürücüsünde (cihazın geçici dizini olabilir) kayıtlı SMS port listesini tutan bir dosya adı.
- "Port in use" ve "Connections are closed while waiting for message" gibi mesajlar da yine SMS veya Datagram bağlantılarında portun meşgul olduğunu ya da beklerken bağlantının kapandığını belirten hatalar.
- "Fail to send Message" de bir SMS gönderme hatasını temsil edebilir.
- Kısacası, kmidrun.exe içindeki bu ağ/protokol metinleri, Java ME’nin hem HTTP iletişimi hem de SMS/Datagram iletişim yeteneklerine dair hata ve durum mesajlarıdır. Bu, dosyanın tam teşekküllü bir Java ME runtime içerdiğini, sadece oyunlar değil ağ işlemlerini de yönettiğini gösterir.
- Java istisnaları ve hata mesajları: Listede çok sayıda Java diline ait istisna adı ve hata mesajı yer alıyor: java/lang/NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException, IllegalMonitorStateException, InstantiationException, ArithmeticException, OutOfMemoryError gibi klasik istisnalar sıralanmış. Bu, Java sanal makinesinin bu istisnaları atabildiğini ve bunlara karşılık gelen mesajları içerdiğini gösterir. Örneğin bir Java MIDlet’te null bir nesneye erişim olursa NullPointerException atılacak; kmidrun içinde bu sınıfın adı ve muhtemel "Null pointer" mesajı mevcut. Aynı şekilde dizilerin sınır dışında indekslenmesi durumunda ArrayIndexOutOfBoundsException oluşuyor vb.
Bunun yanında, "Unhandled AbstractMethodError", "Class not initialised", "Static class initializer failed" gibi daha düşük seviye JVM hataları da metinlerde var. Bu tür hatalar, Java sanal makinesinin doğrulayıcı (verifier) ve sınıf yükleyici aşamalarında ortaya çıkabilecek problemler (örn. bir sınıfın <clinit> bloğu hata verdiyse veya soyut bir metot doğru uygulanmadıysa). Örneğin “Error verifying class %s” ve “Bad class state” metinleri, bir Java sınıfı bytecode doğrulamasında hata çıkması durumunda verilecek mesajlar olabilir. Bu da kmidrun.exe içinde bir bytecode doğrulayıcı bulunduğunu (ya da en azından hataları yakalayıp bildirdiğini) gösterir.
Bazı ilginç metinler de mevcut:- “KILLMENOW” ve “Java Undertaker” – Bu ikisi, programcıların bıraktığı mizahi veya özel debug ifadeleri gibi görünüyor. Örneğin Java Undertaker (Java celladı) ve KillMeNow (beni şimdi öldür) ifadeleri muhtemelen sanal makinenin sonlandırılmasıyla ilgili iç işlevlerin isimleri veya tetikleyicileri. Belki de bir acil çıkış mekanizması ya da çökme durumunda çağrılan bir fonksiyonun içinde bu isimler geçiyor. Kullanıcıya gösterilmezler; daha çok geliştirici esprisi veya hata ayıklama yardımı içindir.
- “forkThread%02d”, “MIDletExecutor: there can be only one” gibi metinler, iş parçacığı yönetimi ve MIDlet çalıştırıcısıyla ilgili. forkThread%02d, yeni oluşturulan thread’lere isim verirken kullanılan bir format string olabilir (örneğin “forkThread01”, “forkThread02” şeklinde). "MIDletExecutor: there can be only one" ise muhtemelen aynı anda tek bir aktif MIDlet olması gerekliliğine dair bir uyarı (belki de bir Highlander esprisi – "yalnızca bir tane olabilir").
- Anahtar kodları: KEY_NUM6, KEY_UP_ARROW, EKeyGameC, EKeyClear, KEY_SOFTKEY gibi metinler de var. Bunlar telefonun tuş takımı kodlarına karşılık geliyor. Java ME’de oyunlar ve uygulamalar tuşları Canvas üzerinden algılar. Örneğin Canvas.getGameAction(keyCode) gibi fonksiyonlar numeric tuşları yön tuşlarına map edebilir. Nokia cihazlarda EKeyGameA/B/C gibi sabitler, özel oyun tuşlarını veya cihazdaki belirli tuşları temsil eder. Bu metinlerin varlığı, Java ortamının tuş girdilerini de yönettiğini, Symbian’ın tuş kodlarını Java’ya çevirdiğini gösterir.
- Genel olarak, listede görülen hemen her istisna veya mesaj, Java SE (Standart Edition) ortamında da görülebilecek şeylerin mobil ortama uyarlanmış halleridir. CLDC kısıtları nedeniyle bazı farklılıklar olsa da (ör. Thread grupları yok, System.exit() desteği kısıtlı vs. – nitekim metinde "MIDP lifecycle does not support system exit. Invalid 'chunk' header..." gibi ifadeler de var), bu stringler bir bütün olarak kmidrun.exe’nin tam teşekküllü bir Java sanal makinesi ve kütüphaneleri seti içerdiğini göstermektedir. Bu metinlerin bir kısmı, hatalar oluştuğunda kullanıcıya gösterilebilir (örneğin “Class %s not found” gibi bir hata, bir MIDlet’in ana sınıfı bulunamazsa görüntülenebilir). Bir kısmı ise sadece geliştirici loglarında veya hiç görünmeden iç logik içinde kalır.
Yukarıdaki analiz, kmidrun.exe dosyasının içeriğindeki metinlerin aslında Symbian S60 1st Edition cihazlardaki Java ME çalışma zamanı ile ilişkili olduğunu ortaya koymaktadır. Bu metinler, Java sanal makinesinin çalışma şekli, desteklediği özellikler ve olası hata durumları hakkında ipuçları verir. Özetle:
- kmidrun.exe, Nokia 3650 gibi telefonlarda Java MIDP 1.0 uygulamalarını çalıştıran ana programdır.
- Hex içinde görülen yazılar, bu programın içine derlenmiş hata mesajları, sistem özellikleri ve sınıf/istisna isimleridir. Bunlar kötü amaçlı veya rastgele değil, bilakis Java ME ortamının beklenen çıktılarıdır.
- Dosyada MIDP/CLDC sürüm bilgileri, cihaz platform adı, medya yetenekleri (kamera/ses), çok dillilik, tarih biçimleri, ağ protokolleri ve Java dilinin istisnalarına kadar pek çok bilgi yer alır. Bu da kmidrun.exe’nin kapsamlı bir Java altyapısı içerdiğini gösterir.
Kaynaklar: Bu analizde sunulan bilgilerin bir kısmı, Symbian/Nokia geliştirme dokümanlarından ve cihaz teknik özelliklerinden derlenmiştir. Örneğin Nokia 3650’nin Java MIDP 1.0 desteği olduğu bilinmektedir ve kmidrun.exe’nin cihaz ROM’unda Java KVM olarak bulunduğu geliştirici forumlarında belirtilmiştir. Java ME profilleri hakkında genel bilgiler için bkz. Java ME/MIDP tanıtımı. Bu veriler ışığında, incelenen metinlerin kaynağı ve amacı anlaşılmıştır.
Linkleri görüntülemek için kayıt olmalısınız
Linkleri görüntülemek için kayıt olmalısınız
Linkleri görüntülemek için kayıt olmalısınız
Mesaj birleştirildi:
Burada hex ile yaptığım bazı çıkarımlar:
kmidrun.exe
Attemp to use bad class
Attemp to call Invalid Native Method
java/lang/Null/PointerException
java/lang/ArrayIntexOutOfBoundsException
java/lang/ArithmeticException
java/lang/ClassCastException
java/lang/OutOfMemoryError
java/lang/ArrayStoreException
unhandled UndefinedOpcodeException
Unhandled FatalSlotError
Unhandled AbstractMethodError
java/lang/IllegalMonitorStateException
Class not initialised
KILLMENOW
Java Undertaker
Could not find jar directory
midrun.exe
-classpath
-descriptor
-serverid
-midletUid
-jar
\System\Data\midp.rsc
-classpath <path> directories and zip files to search
-descriptor <.jad file> MIDlet app descriptor file to use
<MIDlet class>
-verbose enable class loading information
-debug enable
debugging info
-version
show version info
-help show this message
C:/midpinstapps
C:/midptransapps
com.sun.midp.midlet.Main
-help
-version
Profile Spec : %s
microedition.profiles
Profile Impl : %s %s
devel
full_version
Configuration: %s
microedition.configuration
-verbose
-mx
-classpath
Can't combine
-classpath with jam options
-main
-name
-serverport
-descriptor
Can't combine -descriptor with jam options
-http_proxy
-jar
microedition.profiles
MIDP-1.0
microedition.configuration
CLDC-1.0
microedition.http_proxy
HTTP_PROXY
microedition.encoding
ISO8859_1
ENABLE_CLDC_PROTOCOLS
com.sun.lcdui.deviceCaps
MIDP_DEVICECAPS_IMPL
com.sun.lcdui.eventHandler
MIDP_EVENTHANDLER_IMPL
com.sun.lcdui.inputMethodHandler
MIDP_INPUTMETHOD_IMPL
microedition.locale
wireless.messaging.sms.smsc
Class %s not found
Must provide class name
midlet.protocolpath
com.symbian.midp.io.protocol
com.sun.midp.midlet.scheduler
com.symbian.midp.compatibility.runtime.MIDletExecutor
com.symbian.midp.http.proxy
microedition.platform
Nokia3650
supports.mixing
false
supports.audio.capture
supports.video.capture
true
supports.recording
audio.encodings
encoding=pcm encoding=amr encoding=wav
video.encodings
encoding=yuv420
video.snapshot.encodings
encoding=jpeg encoding=bmp encoding=png
forkThread%02d
ALERT: %s
en fr de
es-ES
it
sv
da-DK
no-NO
fi-FI
pt-PT
tr-TR
is-IS
ru-RU
hu-HU
nl-NL
cs-CZ
sk-SK
pl-PL
sl-SL
tl-PH
bg-BG
hr-HR
et-EE
el-GR
id-ID
lv-LV
lt-LT
ms-MY
ro-RO
sr-YU
uk-UA
j
SMS Datagram
WMA_FILE_ACCESS_MUTEX_NAME
NokiaWirelessMessagingAPIMutex
D:\RegisteredPortFileName.txt
#?Class %s extends final class %s?Interface %s does not extend java.lang.Object
Error verifying class %s
Bad class state
Static class initializer failed
Static initializer::<init>()V<clinit>run
main
([Ljava/lang/String
runCustomCode
java/lang/OutOfMemoryError
Bad call to getRawClass
Bad call to getClass
L%s;
Creating primitive array
Bad signature found
Buffer overflow in getStringContentsSafely()
UTCvideo/vnd.nokia.interleaved-multimediaCLDCMIDletExecutor: there can be only oneOutput stream already openedvideo//Illegal start time KVMEventProcessor start failed: Assumed_Canvas_SizeInvalid mode: Null output streamThe requested protocol does not exist midrms.dbno ':' in URLelts[5] = bufferingStartedcom.sun.cldc.i18n.j2se.Default_Writer-midletUidIllegal start day of week Port in useFebsms://pngIllegal end time ConnectionsEventServertuesdayStream closedaudio/x-nokia-rngType is not supportedUS_ASCIINext displayable can't be Alertaudio/midiutInvalid addressISO_8859_1recordStoppedclosedinvalid byte sizeChangedcom.symbian.midp.io.protocol.Connection not open for inputaudio/x-wavSunTransfer-EncodingMalformed Status-Line-inactivityTimeoutGETLast-ModifiedVolumeControlcapture -> cstnanosecond timeout value out of rangeStore open: Invalid AddressVectorEnumeratorfile.iniIllegal month , jmidp_eventsConnectionEndPoint initialization failedwednesdayChunkInputStream: Invalid state = deviceIOException reading reader MIDletAgentTask already scheduled or cancellednot valid content typeencodingNo read()KVMEventProcessorJanmicroedition.encodingCannot receive Message Connection is closedcom.sun.cldc.i18n.j2meEventProcessor start threw: Alert does not accept commandsskip value is negativeIllegal start day of week in month Sun, Illegal end month Negative loop valuerecordErrorMIDletSchedulermdtClass not found in runMIDlet: fridayedtInvalid portMIDletInfrastructureMainArray index out of range: .TimeZoneImplmondayLeftMIDlet-Non-positive period.com.sun.tck.midp.javatest.agent.MIDletAgentConnectiondevice://midiMIDlet-Icon-jar-server:id=POSTNegative initial size: IOException writing writer audio/x-tone-seqfalseHEADMIDlet HashtableEnumerator-jadnovember'chunk' not CRLF terminatedPSTcapture://videoConnection is closedstoppedjpegbinaryThu, pmjavax.microedition.media.control.VideoControl greater than Character.MAX_RADIXType not supportedpartial characterstorageEnd keyEPOC error: MIDletEventQueueThreadmayIllegal end day com.sun.cldc.io.j2mekey can't be null > endOfMediawidthdeviceAvailablehttpInvalid mode Exception ThrownUTF8Connection not open for outputContent-LengthLocator already set on DataSource.-testinggmtaudio/amrCouldn't find resourceServer start NYIThunullreset() not supportedrecordStartedstoppedAtTimetimeout value is negativejava.lang.Object_InternalEncodingNameJunJulUpclass augustdurationUpdatedRecordStore initialization failed Input stream already openedSTUB: ThreadExtensions.stop()GSM: copyrightjavax.microedition.media.control.GUIControlTue, .ProtocolIllegal end day of week in month Maycom.sun.cldc.i18n.j2se.Default_ReaderContent-TypeEncoding UTMarIllegalAccessException Datekey can't be emptyStatus = _Writerdevice://toneevents: function not implementedmark/reset not supportedIllegal end day of week usage: MIDletMain midletName <options>Port rangepdtfebruarycloseExecutorServercom.sun.midp.io.j2meinvalid Message CenterContent-Encodingjavax.microedition.media.control.VolumeControlClear keyFailed to find RecordStore class: fpsSocketFactory._initialize() failedSat, -serverSend keyFridateMIDletExecutorServerjanuarysetRequestMethod: Invalid request method < 0MIDletThreadGroupRootcom.sun.cldc.i18n.Helper.i18npathNo openOutputStreamConnection has been closedMalformed HeaderAddress is nullHostInvalid address or port This method is not supported in com.nokia.mid.ui.FullCanvasstartedrngABC keyDecutcHttpFactory._initialize() failedsaturdayTimer already cancelled.Fail To send MessageName too longClassCastException HTTP-Version Mismatch: javax.microedition.lcdui.Itemc:\system\apps\class-nameidRightNovmstIllegal start day -MIDletConstructorThreadSound is not supported-serveridBad gain valueestjavax.microedition.rms.RecordStorebmpsrcBegin > srcEndIllegal start month OkPort: jmidp_lcduiCannot listen on client connectionj2memark() not supportedInstantiationException errorjuneMon, Data is nullseptemberAugIllegal execution time.Alert does not accept listeners.CalendarImpl less than Character.MIN_RADIXCould not find default timezoneIllegal Capacity: javax.microedition.media.control.ToneControljavax.microedition.media.control.microedition.timezoneevents:No write()jmidp_rmsmicroedition.configurationjulyToolkit.checkError: error codeFunction not supportedCannot read on client connectioninterface trueaudio/sp-midiIllegal DST savingsoctobersp-midicdtInvalid URI: Port not allowedSepWedNull URLNull URIDownbufferingStopped3gpnim-MIDletThreadGroupMissing default encoding Writing to closed ByteArrayOutputStreaminvalid first byte MIDletExecutor: JSTGMTmicroedition.implpathdecemberENABLE_CLDC_PROTOCOLSwavInvalid MIDlet class for Negative delay.}height{Message Type is not supportedUnexpected end of streamISO8859_1.util.javax.microedition.media.control.StopTimeControltitle_ReaderdeviceUnavailableradix MIDP lifecycle does not support system exit.Invalid 'chunk' header: no size specifiedMIDlet-2Unsupported 'Transfer-Encoding' not validOctUTF_8cpstvideo/3gppNo openInputStreamSelect key]\[AprNo such MIDlet: TueaprilMon >= Bad duration value, must be 1-10000000textBad frequency value, must be 0-15000PDTamrMIDletExecutor.setCurrent: Internal ErrorCould not create Player@?Fri, chunked=com.sun.cldc:march987Invalid port numberString index out of range: Sat0amExpires/Wed, .Thread[@Record store closed,authorthursdayConnection is closed while waiting for message volumeChanged not foundcom.symbian.midp.http.proxyCannot find case converter class Failed to create lcdui event server: javax.microedition.lcduiIs destroyedcom.symbian.mip.io.MIDPConnector: Initialization failed - 00microedition.caseConvertersundaycom.sun.cldc.i18n.uclc.DefaultCaseConverterdummy.jar
_drawPolygon
CV
RESUME_MIDLET
_getPixelsShort
InterruptedException
setPriority0
iNativePixelFormat
_drawImage
year
j2me
setARGBColor
Hashtable
getOutput
getDay
Exception
FILLTRIANGLE
intern
wait
_setColor
DateParser
InputStream
getDefault
Class
target
second
enableAllProtocols
setDate
DEFAULT_LINE_BUFFER_SIZE
_drawBitmapShort
HMASK
tzoffset
getClass
readUTF
getBaselinePosition
computeJulianDay
floorDivide
getResourceAsStream
_createTextBox
setRequestMethod
weekday_shorts
getProtocol
equals
E_PRIVATE_DATA_AVAILABLE
getMessage
registeredFinalize
javax/microedition/midlet
javax/microedition/media
EMPTY_ARGS
<IV><init>
fillPolygon
IZ
com/sun/cldc/i18n/j2me
day
iRequestMethod
getTime
MIDletScheduler$Queue
GraphicgetMIDletClassName
hashCode
HTTP_PARTIAL
getAlphaComponent
printStackTrace0
avax/microedition/lcdui
ensureConnected
isEmpty
stopMIDlet
drawPolygon
Object
getDirectGraphics
setAddress
CLDCMIDletSuite
iHandle
iAlphaComponent
invokeDestroyApp
getHeaderFieldInt
HTTP_PAYMENT_REQUIRED
DirectGraphicsImpl
invokeStartApp
drawTriangle
main
HTTP_BAD_METHOD
_getPixelsInt
HTTP_USE_PROXY
getMinute
RuntimeException
INI_EXTENSION
DEFAULT_PATH
handlePolygonError
Enumeration
Alert
NORM_PRIORITY
ttb
String
KErrIllegalArgumentException
position
_drawBitmapByte
IMAGEMASK
javax/microedition/rms
isAlive
makeServerArgs
setRecord
com/symbian/lcdjava/io
getYear
toString
IZ
days_in_month
loadMIDletClass
setLength
reset
handlePixelError
HTTP_SEE_OTHER
KErrArrayIndexOutOfBoundsException
millisPerHour
scheduleMIDlet
Context
getContentDescriptor
MessageListener
BLOCKED
_getNativePixelFormat
iGraphics
setColor
shutdown
removeCommand
END_OF_STREAM
CRLF
awaitCompletion
threadQ
setPriority
java/util
createTextField
checkAnchor
HTTP_TEMP_REDIRECT
index
sleep
readBoolean
getHeight
yield
Connection
-drawImage
Displayable
drawPixels NUM_DAYS getDate
iLength
com/sun/midp/io
LEAP_NUM_DAYS
iStyle
setSize
MIN_VALUE
hour
detailMessage
KErrNullPointerException
MIDletInfrastructureThread
iMode
KErrWrite
iHttpProxyPort
MultiMIDletScheduler
checkBufferCapacity
Connector
RecordStoreNotFoundException
HTTP_CONFLICT
open
HTTP_GONE
Main
notifyIncomingMessage
writeBuffer
getHeaderFieldKey
Image
MIN_PRIORITY
raiseExitDialog
writeBoolean
HTTP_FORBIDDEN
month
iMidlets
backtrace
unloadClasses
notifyAll
HTTP_NOT_AUTHORITATIVE
notify
iTicker
JAN_1_1_JULIAN_DAY
KError
createImage
getDefaultFont
isSingleBit
com/symbian/lcdjava/lang
Runnable
activeCount
MIDEventHandler
SERVER_NAME
File
fillTriangle
getAppProperty
java/lang
HTTP_CLIENT_TIMEOUT
IV
flush
HTTP_BAD_GATEWAY
writeChars
run
printStackTrace
invokePauseApp
DirectUtils
HTTP_UNAUTHORIZED
ToolkitHandle
isPlain
ISO8859_1_Writer
Hashtable$HashtableEnumerator
Type
com/symbian/midp/io
HTTP_PROXY_AUTH
HTTP_UNAVAILABLE
insertElementAt
getThreadGroup
Queue
addElement
getFile
MIDletExecutorServer
start
com/sun/midp/midlet
Server
getHeaderField
getRequestMethod
outputStreamClosed
com/symbian/cldc/net
startMIDlet
stop
setTimeZone
com/sun/cldc/
_start
cldcRoot
write
_getSize
InternalConnector
Status
ChoiceComponent
launch
DirectGraphics
getAddress
Reg
DATE_TIME
MIDletInvoker
createVideoItem
toUnsignedString
CHUNKED_TRANSFER_ENCODING
iDevice
inputStreamClosed
HTTP_REQ_TOO_LONG
_pollExitDialog
setRequestProperty
RecordStoreException
setRate
makeDataOutputStream
getHour
FACE_PROPORTIONAL
_getPixelsByte
elements
openInputStream
getEncoding
load
getProperty
ReplyHeaders
getCurrentMIDlet
isShown
HTTP_UNSUPPORTED_RANGE
NO_SUCH_MIDLET
HTTP_RESET
HTTP_NOT_ACCEPTABLE
hasMoreElements
_findMIDletClassName
getSize
toLowerCase
_createDirectGraphicsImpl
getVersion
openInternal
group
VMASK
Invoker
exceptionThrown
PIN_CHUNK
readLine
startTime
MIDletScheduler
_create
_call******ly
REQUEST_HEADERS_SENT
Item
startMonth
LineBufferLength
addHeader
DOT
removeAllElements
pauseMIDlet
setInvoker
DEFAULT_MIDLET_NAME
seek
isItalic
HTTP_NOT_FOUND
COMMA
_baseline
isDisposed
ensureCapacity
HTTP_LENGTH_REQUIRED
Ticker
openPrim
elementAt
getDevice
CommandListener
connect
currentThread
getMIDletCount
javax/microedition/
contains
getRecordIds
com/nokia/mid/ui
_setLabel
readStatusLine
STOPPED
DRAWTRIANGLE
lock
ThreadProxy
QuartzMessageConnection
getIPv4Address
Listeners
getOffset
getIDs
TextComponent
Date
getHeaderFieldDate
removeElement
System
ID_ARG_NAME
toHexString
NAME_EKeyLeftArrow
(:
ThreadGroup
deleteRecord
getURL
enqueue
substringWidth
RequestProperties
EmptyStackException
TimeZoneImpl
openConnection
HTTP_MOVED_TEMP
_redrawList
handleCurrent
julianDayOffset
getNextRunnableMIDlet;
CLDCMIDletClassLoader
Command
addMidlet
ClassLoader
Calendar
INVALID_STATE
join
getMIDletInvoker
checkValues
QuartzMessageConnection$AddressInformation
CIIV
HTTP_NOT_IMPLEMENTED
internalParse
_drawBitmapInt
Display
createAVideoItem
identityHashCode
NOT_INITIALIZED
EKeyGameC
intValue
com/symbian/midp/io/protocol/http
getMonth
getAssumedHeight
sizeOf
getProperty
julianDayToMillis
Handle2
HTTP_EXPECT_FAILED
Object
HEAD
size
getSelectedIndex
Toolkits
parse
local_tz
indexOf
IconName
CONTENT_ENCODING
sInvokerInstance
getCommand
MIDletInstance
Thrown
******
DataInputStream
VideoItem
openDataInputStream
NoSuchElementException
getNativePixelFormat
soundStateChanged
getPixels
com/symbian/midp/compatibility/runtime
Vector
month_shorts
MidletInstance
getHost
MIDLET_PREFIX
getPriority
stringWidth
ut
<clinit>
initProxy
getFace
makeDataInputStream
MMAInvoker
QUESTION_MARK
HTTP_CREATED
_run
MIDletStateChangeException
ERROR
END_OF_CHUNK
ConnectionNotFoundException
HttpProxyHost
ByteArrayOutputStream
booleanValue
DataOutputStream
Size
SourceStream
LEFT
addCommand
SoundListenerImpl
Name
exitInternal
THREAD_NAME
ArithmeticException
Display
DOW_GE_DOM_MODE
forward
lastElement
MIDlet
Next
ASCII
destroy
MINIMUM_STATUS_LINE_LENGTH
lastIndexOf
BUFFER_LENGTH
com/sun/cldc/io
endTime
pointerPressed
ensureCapacityHelper
getContentLength
Ref
Mutable
EXCEPTION_THROWN
HOME_ID
StringItem
getDisplay
MIDletClassLoader
iMIDletInstance
CHUNKED
FBold
Toolkit
_setTitle
priority
MIDLET
getSecond
parseDate
REPLY_RECEIVED
;initDisplayMode
<III= iServerCount>
HTTP_BAD_REQUEST
MAX_PRIORITY
DESTROY_MIDLET
CONTENT_TYPE
CLDCMIDletExecutorServer$RequestQueue
writeUTF
current
_createGraphics
ChoiceType
SIZE_MEDIUM
MIDletState
HTTP_OK
NotExp
iStop
VOLUME_CONTROL
entry
elementCount
NAME_EKeyShift
minute
HTTP_ENTITY_TOO_LARGE
iTableCacheHandle
STYLE_UNDERLINED
getGameAction
shortValue
setCurrentMIDlet
Font
TimerTask
_getRecordSize
setColorValues
getResponseMessage
getStyle
readChar
CLOSE
getLabel
getRef
handleEvent
APP_DIR
this
charsWidth
MIDletSecurityPolicy
MIDletMain
VideoPlayerHandle
getRequestProperty
capacityIncrement
getSound
pollExitDialog
createView
com/symbian/epoc/events
getMaxSize
midpRoot
setElementAt
elementData
SETUP
packed_time
hasPreviousElement
getInputStream
HTTP_VERSION
iHead
EXPIRES
getText
exit
<readTrailer
iIOMonitor
firstElement
SIZE_SMALL
FLIP_HORIZONTAL
getRawOffset
lN
access$000
EN
ContentConnection
access$002
CLOSED
HttpConnection$PlainDataOutputStream
STYLE_TOTAL
setSelectedFlags
APRIL
HTTP_INTERNAL_ERROR
MAX_FPS
HTTP_GATEWAY_TIMEOUT
ReplyHeaderKeys
ConnectionBase
Manager
STOPPED_AT_TIME
KEY_SEND
width
setPitch
EKeyDownArrow
ClassExtensions
getIPv6Address
HTTP_ACCEPTED
MessageConnection
getData
removeElementAt
KEY_NUM6
VERSION_LENGTH
Face
getAttributeValue
getExpiration
GAME_C
setTicker
decodeRules
Thread
after
openOutputStream
staticMonthLength
Control
setString
directGraphics
SIZE_LARGE
STYLE_ITALIC
_handleAddition
iDateWrapper
ImageElements
XScharWidth
delete
STYLE_PLAIN
makeScheduler
getAssumedWidth
JAVA_EPOCH_YEAR
defaultZone
com/sun/cldc/util
milli
getLevel
OutputStream
Protocol
setMute
ensureBuffer
Initialized
POST
createList
HttpConnection
timezones
getImage
writeChar
VERSION
KErrDisconnected
currentTimeMillis
UcPsetPosition
KNoError
writeShort
HTTP_MOVED_PERM
INITIAL_STATE
writeLong
Form
commandAction
REQUEST_SENT
isMuted
writeBufferSize
MIDletSuite
createInvoker
DataOutput
ensureOpen
setText
AssumedHeight
KErrNotFound
throwIOException
ET
getLength
SecurityException
iMidletClass
FramePositioningControl
table
StringElements
getMediaTime
getResponse
HASH
err
close
NAME_EKeyGameC
SMSMessage
endDay
iAllValid
TimeZone
Executor
checkItem
_resumeTicker
DEVICE_UNAVAILABLE
addRecord
Uri
initialize
skip
Disposed
HTTP_PRECON_FAILED
RMS_DB_NAME
InputStream
StoreObjectsTotal
mapTimeToFrame
readShort
setToBeDisposed
AlertType
ISO8859_1_Reader
_height
MIDComponent
SETFONT
resumeMIDlet
setCharsIPv4Address
closing
postEvent
longValue
getTicker
List
_disposeObject
millisPerDay
zone
getState
RecordStoreNotOpenException
getString
HTTP_NOT_MODIFIED
PrintStream
PAUSED
Toolkit$MidletExit
append
insert
isUnderlined
IndexOutOfBoundsException
startServer
AgetMIDletUid
getType
checkValue
Midlet
_createImageItem
OPEN
LineLength
SNAPSHOT_FORMAT_STRING_BMP
setInputMode
ImageBuffer
FACE_SYSTEM
KEY_SOFTKEY
toOctalString
VideoItem
SourceStream;
expandZeroes
setConstraints
getDisplayableHandle
BLOCK_START
buf
Running
KEY_UP_ARROW
START_MIDLET
_repaint
removeRecordListener
PAINT
threshold
Title
keys
mResponseMessage
writeBytes
COMMAND
Datagram
host
setPhoneNumber
IN_LOOP
TimeZoneImplementation
Ta
DateField
HTTP_MULT_CHOICE
Boolean
prefetch
HttpConnection$Constant
readUnsignedShort
PROPERTIES_START
MAY
Canvas
getDate
State
MIDletExecutor$MIDletConstructorThread
IsIPv4
IsChoiceGroup
StopTime
RUNNABLE
CONNECTION
getChars
OutputStream
setProgram
CLASS_ROOT
repaint
KEY_RIGHT_ARROW
path
com/nokia/mid/messaging
createForm
NAME_EKeyClear
DRAWRECT
_createVideoItem
Mesaj birleştirildi:
Chatgpt 5 araştırması
Harika döküm almışsınız. Bu metinler, Z:\System\Programs\kmidrun.exe ikili dosyasının içindeki sabit (gömülü) yazı dizileri. Kısaca: bunlar Java ME (J2ME) çalıştırıcısının, hata mesajlarının, komut satırı bayraklarının, sistem özelliklerinin ve aygıt yeteneklerinin ipuçlarını veriyor. Aşağıda gruplandırıp ne anlama geldiklerini özetliyorum.
1) Dosyanın rolü ve adlar
- kmidrun.exe, midrun.exe: Symbian’ın J2ME MIDlet çalıştırıcısı (KVM/MIDP başlatıcısı). Bazı yapılarda “midrun” kısaltması da gömülü durur.
- Java Undertaker, KILLMENOW: Geliştirici/teşhis amaçlı dizeler. Çoğunlukla “ölüm bekçisi/çöpçü” gibi, çöken veya kilitlenen MIDlet’leri sonlandıran dahili mekanizmalar için esprili-sert adlar.
2) Komut satırı seçenekleri
Gördükleriniz kmidrun’ın/ara çalıştırıcının kabul ettiği parametreler:- -classpath <path>: Sınıf arama yolu (dizinler/zip’ler).
- -descriptor <.jad file>: Kullanılacak JAD dosyası.
- -jar <file>: Doğrudan JAR’ı başlat.
- -serverid, -serverport: Dahili “executor server”/IPC için.
- -midletUid, -main, -name, -verbose, -debug, -help, -version, -mx: Çeşitli başlangıç, adlandırma, günlükleme ve bellek tavanı (heap) seçenekleri.
- “Can’t combine … with jam options” uyarıları: Bazı bayrakların birlikte kullanılamayacağını anlatan doğrulamalar.
3) Java ME profil/konfig bilgileri
Bu bloklar cihazın Java ortamını tarif ediyor:- microedition.profiles → MIDP-1.0
- microedition.configuration → CLDC-1.0
→ Nokia 3650 dönemine birebir uyuyor: MIDP 1.0 + CLDC 1.0. - microedition.platform → Nokia3650
→ Uygulamalara “Hangi cihazdayım?” özelliği verir. - microedition.encoding → ISO8859_1, UTF_8, US_ASCII vb.
- microedition.http_proxy / HTTP_PROXY: HTTP proxy desteği için özellik anahtarları.
4) Cihaza özgü yetenek/özellik dizeleri
- supports.video.capture true, supports.mixing false, supports.audio.capture, supports.recording
→ 3650’nin video çekimi, ses kaydı gibi yetenekleri için MIDP özellik haritası. Uygulamalar bu anahtarlarla cihaz yeteneğini sorgular. - audio.encodings encoding=pcm encoding=amr encoding=wav
- video.encodings encoding=yuv420
- video.snapshot.encodings encoding=jpeg bmp png
→ MMAPI (JSR-135) medya katmanının kabul ettiği codec/format ipuçları.
5) Yerelleştirme ve diller
- en fr de … tr-TR … gibi uzun liste
→ UI/LCID yerelleştirme desteği. tr-TR’nin görünmesi 3650’nin Türkçe yerelleştirme zinciri olduğunu teyit ediyor.
6) Java çalışma zamanı sınıfları (paket izleri)
Bu satırlar, cihazdaki MIDP/CLDC ve Symbian köprü katmanlarını gösteriyor:- Sun referans uygulaması / TCK izleri:
com.sun.midp.*, com.sun.cldc.*, com.sun.tck.midp.* - Symbian/Nokia köprüleri & I/O protokolleri:
com.symbian.midp.compatibility.runtime.MIDletExecutor,
com.symbian.midp.io.protocol, com.symbian.midp.http.proxy,
com.symbian/cldc/net, com/nokia/mid/ui, com/nokia/mid/messaging
→ Java ile Symbian yereli arasında köprü (display, tuşlar, ağ, mesajlaşma). - Standart Java ME paketleri:
javax/microedition/midlet, lcdui, media, rms, io, wireless.messaging vs.
7) Hata/istisna mesajları
- Standart CLDC/MIDP istisnaları:
NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException, ClassCastException, OutOfMemoryError, ArrayStoreException, IllegalMonitorStateException vb.
→ KVM’nin attığı klasik Java exceptions. - Doğrulama/bytecode yükleme hataları:
Error verifying class %s, Class not initialised, Bad signature found, UndefinedOpcodeException, AbstractMethodError, FatalSlotError
→ Sınıf doğrulayıcı ve interpreter hataları. - Taşma/güvenlik/sınır kontrolleri:
Buffer overflow in getStringContentsSafely(), Invalid URI/port, Invalid request method, Malformed Header/Status-Line, No ':' in URL
→ HTTP ve metin işleme sırasında savunmacı kontroller. - Yazım hataları dikkat çekici:
Attemp to use bad class (Attempt yazım hatası),
ArrayIntexOutOfBoundsException (Index → Intex),
Bu, dönemin gömülü yazılımlarında sık görülen mesaj stringi typo’ları.
8) Kaynak dosyaları ve dizin izleri
- \System\Data\midp.rsc, midrms.db
→ MIDP kaynak ve RMS (Record Management Store) veritabanı izleri. - C:/midpinstapps, C:/midptransapps
→ Genellikle emülatör/SDK klasör adları; gerçek cihazda C: RAM sürücüsü ama aynı dizin adlandırmaları gömülü olabilir. - dummy.jar, com.sun.midp.midlet.Main
→ Test/örnek başlatma girdileri.
9) Mesajlaşma, WMA ve eşzamanlama
- NokiaWirelessMessagingAPIMutex, WMA_FILE_ACCESS_MUTEX_NAME
→ JSR-120/205 (Wireless Messaging API) dosya erişimi ve tekil erişim için mutex adları. - SMS Datagram, sms:// vs.
→ WMA URI şemaları ve SMS soketleri. - QuartzMessageConnection
→ Symbian IPC/mesajlaşma köprüsü (Quartz, S60 UI framework’ünün kod adı).
10) HTTP/Ağ yığını
GET/HEAD/POST, Content-Length, Transfer-Encoding: chunked, HTTP_* sabitleri, Proxy anahtarları, ChunkInputStream mesajları → Dahili HttpConnection (JSR-118) uygulanımının hata ve durum dizeleri. Uygulamalarınız javax.microedition.io.HttpConnection kullandığında bu yoldan geçer.11) Grafik/LCDUİ ve DirectGraphics
- DirectGraphics, DirectUtils, _drawImage/_getPixels*, FILLTRIANGLE, DRAWTRIANGLE, DirectGraphicsImpl
→ Nokia UI/DirectGraphics uzantıları ve LCDUI çizim yoluna ait izler. - com.nokia.mid.ui.FullCanvas
→ Tam ekran API’si (Nokia UI Extensions).
12) Zaman/Takvim/Locale yardımcıları
CalendarImpl, TimeZoneImpl, weekday_shorts, days_in_month, computeJulianDay, microedition.timezone… → CLDC’nin minimal tarih-zaman yardımcıları ve cihazın yerel saat dilimi işleyişi.13) “Neyi İfade Ediyor?” — Pratik çıkarımlar
- Döküm kmidrun.exe’nin kötü amaçlı bir şey olmadığını; aksine Java ME altyapısını başlatan bir sistem bileşeni olduğunu gösteriyor.
- Gördüğünüz parametre ve sınıfların çoğu Sun’ın MIDP referans implemantasyonu ile Symbian/Nokia köprü katmanlarının birleşiminden geliyor.
- MIDP-1.0 / CLDC-1.0 satırları, Nokia 3650’nin dönemsel Java profilini doğruluyor; bu yüzden modern MIDP2-özellikli JAR’lar bazı API’ları bulamayabilir.
- microedition.platform = Nokia3650 gibi özellikler, MIDlet’in cihaz ayarlamasında (uyumluluk, kaynak seçimi, dil) kullanılabilir.
- Yazım hatalı exception metinleri “garip” görünse de yalnızca mesaj dizeleri; sistemin çalışma mantığını bozmaz.
14) SSS — Sık sorulanlar
- “Bu dosyayı silebilir miyim?”
ROM’dadır (Z:), kullanıcı tarafından silinmez/değişmez. - “Virüs olabilir mi?”
Bu dizeler tam tersine standart MIDP/CLDC bileşenlerini gösteriyor. Antivirüslerin “şüpheli” bulması genelde sistem dosyası taraması/heuristic kaynaklıdır. - “Komut satırı parametrelerini ben kullanabilir miyim?”
Normal kullanıcı akışında hayır; bunlar sistem/çalıştırıcı iç kullanımı için. Geliştirici araç zincirlerinin bir parçası olarak cihaz/SDK tarafından kullanılır.
Symbian Series 60 aygıtlarında (Java ME ve MIDP ortamında) yüklenen kmidrun.exe, MIDlet’leri çalıştıran sistem yürütücüsüdür. Dosyanın hex çıktısındaki metinler, MMAPI ve MIDP/CLDC özelliklerini tanımlayan sabit mesaj dizileridir. Aşağıdaki tablolar ve açıklamalar bunların kökenini açıklar.
Sistem özellikleri ve JVM mesajları
| Grup | Açıklama / kaynak |
|---|---|
| CLDC sistem özellikleri | Java ME’de System.getProperty() ile sorgulanabilen temel özelliklerdir. “Learning Wireless Java” çalışmasındaki Tablo 2‑3, CLDC cihazlarında microedition.platform (cihaz veya platform adı), microedition.encoding (varsayılan karakter kodlaması), microedition.configuration (örneğin CLDC‑1.0) ve microedition.profiles (desteklenen profiller, örneğin MIDP‑1.0) özelliklerinin döndürüldüğünü belirtir. Hex dizilerindeki microedition.platform Nokia3650, microedition.profiles MIDP-1.0 ve microedition.configuration CLDC-1.0 bu özelliklerin cihaz adını ve profil/konfigürasyon sürümünü içerdiğini gösterir. |
| MMAPI sistem özellikleri | Mobile Media API (JSR‑135) standardı; supports.mixing, supports.audio.capture, supports.video.capture, supports.recording, audio.encodings, video.encodings, video.snapshot.encodings gibi anahtarlarla cihazın multimedya yeteneklerini sorgulamak için sistem özellikleri tanımlar. Resmî spesifikasyon bu anahtarların her birinin anlamını açıklar: supports.mixing ses karıştırmanın desteklenip desteklenmediğini (true/false), supports.audio.capture ses yakalamanın, supports.video.capture video yakalamanın, supports.recording en az bir oynatıcı türüyle kayıt özelliğinin olup olmadığını belirtir. Ayrıca audio.encodings, video.encodings ve video.snapshot.encodings anahtarlarının cihazın desteklediği ses, video ve anlık görüntü kodlamalarını boşlukla ayrılmış bir liste halinde döndüreceğini açıklar. Dosyadaki supports.video.capture true/false, supports.recording, audio.encodings encoding=pcm encoding=amr encoding=wav, video.encodings encoding=yuv420, video.snapshot.encodings encoding=jpeg encoding=bmp encoding=png gibi satırlar, bu özelliklerin örnek değerleridir. |
| Geliştirici kılavuzu (MOTOMAGX) | Motorola’nın “Java ME Developer Guide for MOTOMAGX” dokümanı, sistem özelliklerini listeleyen tabloda supports.mixing (ses karıştırma destekleniyor), supports.audio.capture (ses yakalama destekleniyor), supports.video.capture (video yakalama destekleniyor), supports.recording (video kaydı destekleniyor) ile audio.encodings, video.encodings ve video.snapshot.encodings anahtarlarını açıklar. Bu, hex dizilerindeki mesajların resmi dökümantasyonda tanımlanan sistem özellikleri olduğunu doğrular. |
| Özelliklerin pratik açıklaması | InfoWorld’ün JSR‑135 tanıtım makalesi, MMAPI özelliklerini özetler: supports.audio.capture ses yakalama desteklenip desteklenmediğini belirtir, supports.video.capture video yakalama desteğini sorgular, supports.recording kayıt desteğini gösterir, audio.encodings, video.encodings ve video.snapshot.encodings ise cihazın desteklediği formatların listesini döndürür. Aynı makale, supports.recording özelliğinin true dönmesinin her medya türü için kayıt desteklendiği anlamına gelmediğini, örneğin Nokia 6600’un ses kaydını desteklerken video kaydını desteklemediğini belirtir. |
Diğer dikkat çekici dizeler ve işlevleri
- kmidrun.exe, midrun.exe, Java Undertaker, KILLMENOW gibi adlar geliştiricinin dahili tanımlarıdır. kmidrun.exe MIDlet çalıştırıcısını, midrun.exe kısa adını, “Java Undertaker” ve KILLMENOW ise kilitlenen MIDlet’leri sonlandıran hata yakalayıcısını temsil eder.
- Komut satırı bayrakları (-classpath, -descriptor, -jar, -serverid, -midletUid, -verbose, -debug, -help, -version) MIDlet çalıştırıcının kabul ettiği seçeneklerdir. Bunlar doğrudan kullanıcıya yönelik değil, sistemin JAR/JAD paketini uygun parametrelerle çalıştırması içindir.
- J2ME hata dizeleri (NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException, OutOfMemoryError vb.) standart CLDC/MIDP istisnalarıdır; hex çıktısında bunlar hata mesajları olarak yer alır.
- Yerelleştirme ve dil kodları (en fr de … tr-TR …) cihazın desteklediği yerel ayarların listesidir; MIDlet’ler microedition.locale özelliğinden bu ayarı okuyarak uygun dili seçebilir.
- MMAPI sınıfları ve paket adları (com.sun.midp.midlet.*, com.symbian.midp.compatibility.runtime.MIDletExecutor, javax.microedition.media.control.VideoControl vb.) J2ME/CLDC uygulamalarının ve Symbian köprü katmanının parçasıdır.
Sonuç
Hex çıktısında görülen metinler, Nokia 3650’nin ROM’da bulunan kmidrun.exe dosyasının Java ME yürütme ortamına ait sabit dizeleridir. Bunlar, CLDC/MIDP sistem özellikleri (microedition.platform, microedition.profiles vb.), Mobile Media API’nin multimedya yeteneklerini sorgulamak için tanımladığı özellikler (supports.audio.capture, supports.video.capture, audio.encodings vb.) ve standart Java istisna mesajlarından oluşur. Bu yüzden kmidrun.exe içindeki “supports.video.capture” gibi satırlar kötü amaçlı yazılım değil, cihazın Java ortamının kendi özelliklerini ve hata mesajlarını gösterir.Linkler:
Linkleri görüntülemek için kayıt olmalısınız
Linkleri görüntülemek için kayıt olmalısınız
Linkleri görüntülemek için kayıt olmalısınız
Son düzenleme:


