Gönner-Abo

Ab CHF 5.– im Monat

👉🏼 Wir benötigen deine Unterstützung! Unterstütze macprime mit einem freiwilligen Gönner-Abo und mache die Zukunft unseres unabhängigen Apple-Mediums aus der Schweiz mit möglich.

macprime unterstützen

Frage an Programmierer und Gurus ;-)

Profilfoto von Solaris

VonAntwort von Solaris

Vorgeschichte:

iSub. Dieses grummelige Gerätchen mit dem ansich guten Klang macht ja so einige Mühe unter OS X - allfällige Besitzer wissen nur zu gut, wie mühsam der Umgang damit ist: Volume-einstellungen gehen verloren, die Tastatur-Lautstärketasten wirken nicht oder nur ungenügend auf den iSub, und wenn man auf MUTE schaltet, oder einen Stecker in den Audio-Ausgang steckt, bleibt der Herr iSub schön eingeschaltet.

Abhilfe schafft das Aufrufen der SysPrefs -> Audio - dann gehts wieder. Man kann sich ein Skript basteln, das selbiges nach dem sleep oder so aufruft.

Apple kümmert sich nicht. In discussions.info.apple.com werden threads geschlossen, wie man es von diesem Ort gewohnt ist (wenns mal all zu kritisch wird, löschen oder schliessen sie leider)

Jetzt bin ich genug grummelig, dass ich da selber was tun will - zumindest versuchen. “Unmöglich” sag ich erst im Nachhinein.

Hab bisserl was auseinandergenommen - ausnahmsweise mal keine Hardware - sondern OS X Sachen. Schliesslich liefert Apple ja fast alles mit was der cracker so braucht 8-) (otool, nm, chud etc etc)

Meine Frage (Juuhuu er kommt zur Sache..)

Am Beispiel Sound Preference Pane - wenn dieses 92 KB grosse stück code aufgerufen wird, WIE wird es aufgerufen, WO ist der einstieg/Call ?

Es reicht mir auch schon wenn mir einer sagen kann wo ich das nachsehen kann ?

/System/Library/PreferencePanes/Sound.prefPane/Contents/MacOS/Sound:
(__TEXT,__text) section
00000fc0      mfspr      r0,lr
00000fc4      stmw      r26,0xffe8(r1)
00000fc8      addis      r2,r12,0x1
00000fcc      stw      r0,0x8(r1)
00000fd0      addi      r2,r2,0xf684
00000fd4      addis      r4,r12,0x1
00000fd8      stwu      r1,0xff80(r1)
00000fdc      or      r31,r12,r12
00000fe0      or      r27,r5,r5
00000fe4      lwz      r0,0x4(r2)
00000fe8      lwz      r4,0xf1fc(r4)
00000fec      stw      r3,0x40(r1)
00000ff0      addi      r3,r1,0x40
00000ff4      stw      r0,0x44(r1)
00000ff8      bl      0xbc5c
00000ffc            or.      r30,r3,r3
00001000      beq      0x1118

(Nich auslachen, ich liebe assembler.. ich versteh das wenigstens im gegensatz zu kryptischem C++ oder Perl (aargl) )

Naja .. falls sich einer auskennt… könnt ja sein, wär dankbar um gehhilfe :-)

Unsere Sponsoren

Profilfoto von hirnstroem

hirnstroem

Guten Morgen,

hab dir hier schnell aufgeschrieben was welcher Befehl tut. Sollte mehr oder weniger hinkommen.

mfspr - Move from Special-Purpose Register stmw - Store Multiple Word stw - Store Word addis - Add Immediate Shifted addi  - Add Immediate stwu - Store Word with Update lwz - Load Word and Zero bl - Branch and Link beq - Springe bei Gleichheit (weiss nicht mehr wie dies bezeichnet wird  :-/)

Und irgendwie müsst hier der Call auch “call” heissen, wenn man mich fragt. Allerdings wäre es möglich das das bl (Branch and Link) an die besagte Adresse etwas “übergibt” und dieses etwas dann wiederum etwas auslöst. Hab leider gerade keinen Mac in der nähe sonst würde ich dies schnell austesten.

Grüsse hirnstroem

Edit:

http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.aix.doc/aixassem/alangref/alangref.htm

^^ Eine Referenz für das ganze.

(Bearbeitet am 13. September 2005 um 10:49 Uhr von )

Profilfoto von Solaris

Solaris

Hi,

danke dir sehr, aber die PPC Befehle kenn ich schon :-) Aber ich kenn OSX nicht gut genug um zu wissen wie es mit Codestücken im weitestens Sinne umgeht.

Oder mit anderen Worten - wenn ich die Sound prefs aufrufe, wird dieses Stück Code dann einfach von anfang (wie im Listing) aufgerufen oder gibts eine Sporungtable die von “Systempreferences” aufgerufen wird?

Will eigentlich verfolgen was Sound prefs genau macht, nachdem es geladen wird!

BEQ heisst Branch if EQual ;-)

Profilfoto von hirnstroem

hirnstroem

Branch if EQual, grml, alles klar, danke :-).

Also um das ganze etwas genauer unter die Lupe zu nehmen bräuchtest du folgende Tools, damit ich dir weiterhelfen kann:

otool gdb hexEdit

Mit otool kannst du nach erfolgreicher Installation mit dem folgenden Befehl Dateien disassemblieren (oder wie man dies dann auch nennt):

>otool -tvV /pfad/zum/entsprechenden/file | Editorname

Nun erscheint wieder eine Menge Code. Nun ist es normalerweise so, dass man in der Regel nach dem Selektor “r4” ausschau halten muss, da dieser für solche “calls” zuständig sein sollte.

Um nun diesem Selektor zu folgen wird über das Terminal gdb aufgerufen (einfach gdb eintippen). Danach wird wieder das File angegeben, welches wir anschauen wollen. Nun muss an der Entsprechenden Adresse ein Brakepoint gesetzt werden: entweder: b *00000fd oder: b * 0x0fd Nun kann das Programm gestartet werden (r eingeben) Wenn der Brakepoint erreicht wurde, stoppt das ganze und nun hat man die möglichkeit den Selektor zu examinieren und als String auszugeben. Dazu wird der folgende Befehl benutzt: x/s $r4

Eventuell wirst du auch unter anderen Selektoren als “r4” weitere Aufrufe finden, habe leider momentan nicht die Möglichkeit dies auszutesten.

Grüsse hirnstroem

Anmelden um neue Antworten zu verfassen

Allegra Leser! Nur angemeldete Nutzer können bei diesem Beitrag Antworten hinterlassen. Jetzt kostenlos registrieren oder mit bestehendem Benutzerprofil anmelden.