Как перевести этот код с 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
Как в этом случае заставить функцию GreatherThanN увидеть это самое N?
class GreaterThanN {
int N;
public:
GreaterThanN(int _N): N(_N)
{
}
bool operator ()(int x) const
{
if (x > N)
return true;
return false;
}
};
int N = 5;
count_if(begin(v), end(v), GreatherThanN(N));
ума не приложу, почему размер 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. g++ -o app.exe "src\\log.o" "src\\app.o"
/sys/class/gpio/export
меняет состояние системы и запоминается между запусками.direction
надо писать in
или out
, а high
или low
нужно писать в value
. Сегфолта от этого быть не должно, тем не менее.char *s = new char[strlen(source) + 1]; ... strcpy_s(s, strlen(s), source);
strlen(s)
-- вообще за гранью добра и зла и возвращает случайное число, по большому счёту. Потому что s -- только что выделенный неинициализированный массив.strcpy_s
совершенно бессмысленный и неправильный. Бессмысленный, потому что ты только что выделил столько памяти, сколько данных в строке. strcpy_s имеет смысл, если буфер в который ты копируешь -- это массив фиксированной длины. Неправильный, потому что даже если ты имел в виду strlen(source)
, а не strlen(s)
, то должен был передать strlen(source) + 1
, чтобы было куда 0-терминатор скопировать. Кроме всего прочего, strcpy_s ещё и возвращает код ошибки, который имеет смысл проверить.memcpy(s, source, strlen(source) + 1);
или вообще выкинуть s = new char [...]; strcpy_s ... delete [] s;
и заменить на s = strdup(source); ... free(s);
strcpy_s(s, strlen(source) + 1, source);
void OutFloat(double v);
sub sp,16
mov bp,sp
fstp qword ptr [bp + 8]
call OutFloat
add sp,16
Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает.
Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает. К нему по прежнему можно обратиться и вывести значения xy. При этом по завершению работы программы, в консоль выводится "destruct" второй раз.
как правильно уничтожить объект?