Как перевести этот код с C++?
mov ebx, [ebp - 8]
lea ebx, [ebp - 8]
lea edx, [ebx + ecx + 4] ; add FirstThunk RVA to base. Offset &function is 4
lea edx, [edx + 20] ;size of IMAGE_THUNK_DATA
можно ли ее как-то улучшить
mov byte [sockaddr_in + 0], AF_INET ; sin_family
mov byte [sockaddr_in + 2], 0 ; sin_port[0] это старший байт sin_port
mov byte [sockaddr_in + 3], 80 ; sin_port[1] а это младший
ума не приложу, почему размер void _stdcall foo(short a, short b); параметров равен 8
Как выяснилось, стек растет не только на 4 байта, а на 2.
sub $imm, %esp
) не означает, что это следует делать. См: The stack will always be maintained 16-byte aligned, except within
the prolog (for example, after the return address is pushed), and except where
indicated in Function Types for a certain class of frame functions
Для венды на x86 я такого описания на том же сайте не нашёл, но точно выравнивание должно быть не меньше 4. В общем выравниваются в памяти поля по границе кратной своему же размеру. То есть 1-байтовые поля не выравниваются, 2-байтовые — выравниваются на чётные позиции, 4-байтовые — на позиции кратные четырём и т.д.
.a is an archive of code: compiled but not linked. You would link statically with it during your program's final link step.
.lib can be either the same as .a, or a magical so-called "import library": a thin placeholder which causes you to require a .dll at runtime.
-l<libname>
.gcc -c file.c `pkg-config --cflags <libname>`
gcc file.o -o file `pkg-config --libs <libname>`
Подскажите пожалуйста, почему так
a b c
символы, которые нужны библиотеке b
будут искаться только в библиотеке c
, но не в a
. Если между библиотеками нет циклических зависимостей (т.е. нет такого, что a
определяет символ, нужный b
, а b
определяет символ, нужный a
), то их можно упорядочить так, что линковка будет успешной (см. топологическая сортировка). Если циклические зависимости есть, или сортировать лень, можно перечислить нужные библиотеки несколько раз или взять их в группу:g++ main.cpp -Wl,--start-group -lglfw3 -lgdi32 -lopengl32 -lglew32s -Wl,--end-group