Wenn ich das jetzt richtig verstehe kann man Shellcodes quasi nur in Strings (char Arrays) ablegen?
Oder kann man auch die Adresse auf die ein pointer zeigt, der eigentlich für ein int Array ausgelegt ist, mit einem Shellcode bepflanzen?
Sorry aber da hängt mein Kopf gerade noch fest.
Die Darstellung von Shellcode in Hex ist lediglich Konvention. Die Darstellung (für uns Menschen) von Maschinencode passiert immer Byteweise - deswegen bietet sich ein Char Array an.

Grundsätzlich: Für die Maschine ist es erstmal egal, wie das, was sie da reinbekommt in der Programmiersprache "genannt" wird (abgesehen von sonstigem Code/Exceptions, welcher ggf. arithmetische no-gos abfängt).

Ich kann dir noch immer "smashing the stack for fun and profit" empfehlen.
Für OS Internals: "Modern Operating Systems" und "The 4.4BSD Operating System". Das ist zwar im Detail nicht das aktuellste, aber vieles stimmt konzeptionell noch immer.