170 похожих чатов

Привет. Есть ли принятое или некое «обычное» использование регистров на

amd64 под gcc? Можно ли с высокой долей вероятности считать, что в RAX находится this?
Я смутно припоминаю, что на x86 this обычно был в EAX, хотя могу ошибаться и может это вообще дурацкий вопрос.
Просто я столкнулся с очень непонятным багом и любой кусочек пазла может здорово помочь.

segmentation fault, есть backtrace но нет core dump.
RAX: 00000000000000a4 RBX: 00000000007037e0 RCX: 0000000000000003
RDX: 0000000000000104 RSI: 000000000000000a RDI: 0000000000000000
RBP: 0000000000706be0 R8 : 0000000000000007 R9 : 0000000000720de0
R10: 0000000000000003 R11: 0000000001b71124 R12: 0000000001b099d0
R13: 00007f9d8bb348e8 R14: 00007f9d8bb31010 R15: 0000000000000000
RSP: 00007ffcf2a21bd8

Прога на C++, поэтому вопрос сюда. 😇
В данном случае я из RAX делаю вывод, что с this что-то категорически не то. Но может я сильно ошибаюсь, а может из регистров вообще ничего сказать нельзя.

7 ответов

13 просмотров

в eax точно не this

Есть C++ Itanium ABI (который де-факто ABI для х86-64), который говорит что this передается как неявный первый аргумент, и есть SysV AMD64 calling convention, которая говорит что integer и pointer аргументы для пользовательских функций передаются в rdi, rsi, rdx...

Alexander- Автор вопроса
Alexander B. Babayants
Есть C++ Itanium ABI (который де-факто ABI для х86...

В моём случае очень похоже, что this оказался в RDI (как написал Boris). Всё-таки amd64.

Alexander
В моём случае очень похоже, что this оказался в RD...

Рекомендую не гадать, а разобрать дизассемблер, тем более что у вас видимо есть сырцы. Что rax, что rdi в середине функции могут использоваться как угодно.

Arguments 1-6 are passed via registers RDI, RSI, RDX, RCX, R8, R9 respectively;

Привет. Вот тут всё описано https://www.uclibc.org/docs/psABI-x86_64.pdf

Cоответсвенно с SystemV ABI RAX не используется для передачи параметров. И скорее всего, там не будет никакого this. this надо искать в RDI Так как он передаётся как обычный первый параметр функции. http://itanium-cxx-abi.github.io/cxx-abi/abi.html#this-parameters

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта