(x86-64, 64 бит, Windows), для вызова из python, в первом варианте я использовал mov для копирования адреса в регистр, и простое смещение, относительно него на 12 байт, для доступа к последнему элементу (1445) списка который я передаю в python, и всё правильно, работает, а во втором варианте я использовал инструкцию lea, ожидая что в rdi скопируется 8-ми байтовый адрес, второго элемента массива (даже если не указывать индекс, то printf всё равно возвращает неверный результат, вроде: 2323883616, 3052250720 ... и т.д.), но вместо этого туда попадает какой-то мусор, я судя по всему не совсем верно понял как работает инструкция lea, не подскажите в чем ошибка?
Во втором случае ты грузишь адрес самого аргумента (не массива) в стеке и адресуешь соответственно дальше стек.
А кроме как подгрузить DLL больше нет в Python способа вызывать библиотеку? С .lib он не работает?
Писать расширение и линковаться с либ. Ну это если без извращений.
Даже немного стыдно что я этот вопрос задал, вроде помню, но порой забываю как работает lea, и наступаю на те же грабли...
Обсуждают сегодня