
04.02.2021, 18:34
|
|
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами:
4609424
Репутация:
183
|
|
Сообщение от ishi
Ребят, меня тралит компилятор, помогите
Есть функция, чья задача, это при вызове получить аргументы, отправленные в MessageBoxA, и позволить их изменить
Эта функция корректно отображает аргументы, т.е. всё перехватывается
C++:
Код:
__declspec
(
naked
)
void
_stdcall
printSomeShit
(
int
a
,
char
*
b
,
char
*
c
,
int
d
)
{
char
bb
[
256
]
;
char
cc
[
256
]
;
printf
(
"\n"
)
;
std
::
cin
>>
bb
;
b
=
bb
;
printf
(
"\n"
)
;
std
::
cin
>>
cc
;
c
=
cc
;
printf
(
"\n%d || %s || %s || %d"
,
a
,
b
,
c
,
d
)
;
_asm ret
;
}
Однако же попытки присваивания не меняют значение аргументов, хотя если в отладчике студии свапнуть адреса, то всё сработает
Я решил посмотреть, что делает в этом случае компилятор, и вот:
То-есть, он вообще ничего не делает. Он буквально проигнорировал b = bb и не прописал ей инструкций. В смысле? Почему?
Если же попытаться написать &b == &bb, то он даже компилировать программу откажется.
Я не понимаю, что тут происходит ,_,
ну у тебя как минимум __declspec(naked) а ты объявляешь переменные внутри функции
прибавь к ним static (static char) и проверь, как себя поведёт
мсвс запрещает вообще внутри функций объявлять переменные (не static), значит у тебя не мсвс
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|