Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: elfish_rider am 18. July 2005, 18:41
-
Ich kopiere mit Zeigern eine Struktur in eine andere:
void GetTSS(WORD TaskID, struct TSS* TaskStateSegment)
{
struct TSS* Base = (struct TSS*)(0x20000 + TaskID*100);
*TaskStateSegment = *Base;
}
Der Compiler (gcc 3.4.3) kompiliert das natürlich fehlerfrei, jedoch sagt mir der Linker:
cpu.o(.text+0x16):cpu.c: undefined reference to `_memcpy'
Wieso um alles in der Welt will der eine Funktion der Standardbibliothek aufrufen, wo ich doch "Freestanding-Code" erzeuge???
Kann mir wer sagen, wie ich diese memcpy-Funktion deklarieren soll bzw. wie ich dieses Problem anders lösen könnte...
-
er will memcpy() aufrufen, weil du ein struct (=großes dings) kopieren willst.
memcpy:
void * memcpy(void * dest, const void * src, size_t num)
{
char *_dest = (char*)dest, *_src = (char*)src;
while(num--)
*_dest++ = *_src++;
return dest;
}
und dann würde ich explizit den aufruf hinschreiben:
void GetTSS(WORD TaskID, struct TSS* TaskStateSegment)
{
struct TSS* Base = (struct TSS*)(0x20000 + TaskID*100);
memcpy((void*)TaskStateSegment, (void*)Base, sizeof(struct TSS));
}
anders lösen: einfach jedes member einzeln kopieren:
void GetTSS(WORD TaskID, struct TSS* TaskStateSegment)
{
struct TSS* Base = (struct TSS*)(0x20000 + TaskID*100);
TaskStateSegment->eax = Base->eax;
TaskStateSegment->ebx = Base->ebx;
TaskStateSegment->ecx = Base->ecx;
/* usw */
}