Saya membaca beberapa kode emulator dan saya telah membalas sesuatu yang sangat aneh:
switch (reg){
case 'eax':
/* and so on*/
}
Bagaimana ini mungkin? Saya pikir Anda hanya bisa switchpada tipe integral. Apakah ada beberapa tipuan makro yang sedang terjadi?
int, jadi legal. Namun, nilai konstanta multi-karakter ditentukan oleh implementasi, jadi kode mungkin tidak berfungsi seperti yang diharapkan pada compiler lain. Sebagai contoh, eaxmungkin 0x65, 0x656178, 0x65617800, 0x786165, 0x6165, atau sesuatu yang lain.
'eax' != 'ebx', tentu saja, itu hanya gagal satu atau dua contoh Anda. Meskipun mungkin ada beberapa kode di suatu tempat yang berlaku *(int*)("eax") == 'eax', dan karena itu gagal sebagian besar contoh Anda.
'eax'mungkin membandingkan sama dengan 'ebx'atau dengan 'ax', dan pernyataan sakelar tidak akan berfungsi sebagaimana mestinya.
'eax'dan itu menghitung nilai integer konstan