Thread Win32::API und LibUSB-Win32
(36 answers)
Opened by rosti at 2017-02-03 11:40
Pointer- Akrobatik ;)
=================== Struct zusammenbauen über die Speicheradressen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 Win32::API->Import('libusb0', 'int usb_get_busses()'); my $mem_usb_bus = ReadMemory(usb_get_busses(), 532); my %usb_bus; @usb_bus{qw(next prev dirname devices location root_dev)} = unpack "VVZ512VVV", $mem_usb_bus; die Dumper \%usb_bus; $VAR1 = { 'devices' => 11880344, 'dirname' => 'bus-0', 'location' => 0, 'next' => 0, 'prev' => 0, 'root_dev' => 12579720 }; Btw., die 32-bit-Integer sind little Endians, war auch nicht schwer, das rauszukriegen. So zeigt 'devices' => 11880344, auf die Adresse im MEM wo die Devices liegen, und siehe da ist es auch: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $VAR1 = { 'bDescriptorType' => 1, 'bDeviceClass' => 0, 'bDeviceProtocol' => 0, 'bDeviceSubClass' => 0, 'bLength' => 18, 'bMaxPacketSize0' => 8, 'bNumConfigurations' => 1, 'bcdDevice' => 1, 'bcdUSB' => 272, 'dev' => 0, 'filename' => '\\\\.\\libusb0-0001--0xffff-0x1122', 'iManufacturer' => 1, 'iProduct' => 2, 'iSerialNumber' => 0, 'idProduct' => 4386, 'idVendor' => 65535, 'next' => 0, 'prev' => 0, 'usb_bus' => 9769944, 'usb_config_descriptor' => 9769760 }; Allerdings ist der Hash unvollständig. In der usb.h struct-Definition gibt es 2 Einträge, da weiß ich nicht weiter Code: (dl
)
1 struct usb_device Pointer ist klar, der beansprucht 4 Bytes als little Endian. Frage 1: Das ist kein Pointer, wieviele Bytes muss ich da veranschlagen? sizeof(usb_device_descriptor) und die Daten als Array? Frage 2: Vermutlich 0 Bytes? Ansonsten wird das Device schonmal gefunden und die mit ReadMemory gelesenen Konfig-Daten stimmen auch, s.oben. Viele Grüße! |