Der Kompiler codiert die Methodennamen ganz einfach auf diese Weise. Das Nicht-Statische Methoden einer Klasse indirekt gecallt werden ist klar, ich sagte ja, das hat nur wenig mit dem Aufruf zu tun.
Angenommen ich habe zwei Funktionen:
int add(int a, int b);
double add(double a, double b);
Dann dient diese Codierung dazu, das der Compiler und der Assembler diese Methoden unterscheiden können, da der Namen von beiden ja gleich ist.
EDIT:
Solche namen kommen mehr eher aus libs bekant vor bzw dlls. da mus das system ja anhand der Namen die passende funktionsadresse ermitteln können.
Ja, das gleiche muss der Assembler und der Linker aber auch bei nicht-lib Funktionen machen
Dazu dient diese Codierung ja.
@RedEagle
Wenn deine Anwendung im Kernel-Mode läuft, kannst du einfach normale Calls benutzen, indem du deine Funktionen in der API als extern deklarierst und dann die Symbole beim Laden relocatest. Wie das geht sollte in deiner Beschreibung zu deinem Executableformat stehen. (Wie es bei ELF geht ist z.B. sehr gut in der Dokumentation zu ELF beschrieben.)