LINUX.ORG.RU

AT&T и имена функций

 


0

2

здрасте здресте люди добрые

помогите пожалуйста окончательно понять как формирует имя функции компилятор. сейчас постараюсь объяснить для чего это мне. допустим у меня есть уже написанные функции на GAS и я хочу использовать их в коде на СИ


.section .text
global _Z3fooi
_Z3fooi:

//суть вот в чем, компилятор после _Z указывает количество букв в имени функции, дальше имя фукнции и i-это тип аргументов функции.
но что значит _Z? помогите понять. если я это пойму , то смогу сам формировать имена функций, на GAS, которые можно будет запускать в коде на СИ без ошибок.

ret




#include <stdio.h>

extern void foo(int);

int main()
{

foo(5);

return 0;
}


очень нуждаюсь в вашей помощи. пожалуйста отнеситесь серьезно

Кстати, а зачем тебе в это упарываться? Если ты хочешь свои ассемблерные функции дёргать, то объявляй их extern "C" и тогда к имени должно только добавлять _ в начале.

PS: ты точно не в режиме C++ компилируешь? Вроде бы в чистом Си не должно быть такого.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

я тоже об этом подумал, но потом решил не писать - вроде чел на асме пилит, явно должен знать про экстерн си и порчу имен.

deep-purple ★★★★★
()
Ответ на: комментарий от Assembler

Теперь вы поняли, что на ЛОР можно получать адекватную помощь, на адекватные вопросы?

Владимир

anonymous
()
Ответ на: комментарий от deep-purple

уважаемые, вам пара строчек ничего не стоит. а мне они огромная помощь. что-то потерялся в трех соснах и не могу сообразить, как избавиться от искажений имен и сделать так чтобы к ним добавлялся только _

Assembler
() автор топика
Ответ на: комментарий от anonymous

давайте пожалуйста не будет про это. сейчас сюда залезет LGH и начнется. я не хочу загаженную им тему.

все решилось. все получилось. всем огромное спасибо.

Assembler
() автор топика
Ответ на: комментарий от Assembler

давайте пожалуйста не будет про это. сейчас сюда залезет LGH и начнется. я не хочу загаженную им тему.

С вами более этот вопрос заострять не буду.

Владимир

anonymous
()
Ответ на: комментарий от anonymous
Слава Святому Господу Отцу Небесному!  
Слава Святому Господу Иисусу Христу!
Слава Святому Господу Святому Духу!  
Слава ВсеСвятой Владычице Нашей Богородице!  
Слава Царице Небесной!  
Слава Царице Милости!  
Слава Святому Животворящему Кресту Господа Нашего!  

Владимир

anonymous
()
Ответ на: комментарий от Siborgium

Осталось только понять, что можно получать адекватную помощь на адекватные вопросы в гугле.

Тоже верно.
«Мы с гуглом по жизни шагаем …».

Владимир

anonymous
()
8 июля 2020 г.
Ответ на: комментарий от anonymous

ребята, извините за наглость, но не могли бы вы еще просветить немного.

_Z в измененном имени функции значит, что она будет импортированна из другого модуля?

что значит 'Z'?   я не нашел ее в таблице

Assembler
() автор топика
Ответ на: комментарий от deep-purple

вряд ли Владимир ответит, но может быть вы сможете помочь?

_Z  в украшенном имени yфункции на С++ что значит?

что функция описанна в другом модуле?

Assembler
() автор топика
Ответ на: комментарий от Assembler

в C не должно быть такого. если ты компилишь как c++, оборачивай объявления этих функций в extern"C"{…}

anonymous
()
Ответ на: комментарий от anonymous

да, вы правы в СИ такого нет. я пытался вплести функцию на Assembler в С++ и сталкнулся с тем ,что не понимаю, что есть


_Z

скажите пожалуйста , что это? в таблице я не нашел.

Assembler
() автор топика
Ответ на: комментарий от anonymous

мне нужно это для того, чтобы давать правильные имена функциям самому ,и чтобы их понимал g++

это значит что функция описана в другом файле, или что? как вы думаете?

Assembler
() автор топика
Ответ на: комментарий от Assembler

Она может быть описана и в текущем файле, это не играет роли.

Вообще порча имен выполняется только для доступных извне символов (external visible outside the object file where they occur). A ‘_Z’ означает, что это имя функции.

anonymous
()
Ответ на: комментарий от anonymous

А нет, соврал. Префикс ‘_Z’ не только для функций используется. В общем этот префикс означает mangled name и все, больше ничего. А поскольку порча имен выполняется только для публичных символов, то можно сказать что этот префикс означает публичный символ, в том числе и определенный в другом модуле. Но только зачем это говорить?

anonymous
()
Ответ на: комментарий от Siborgium

Как по мне это идейный продолжатель метода метапрога, зачем гугл когда есть стая обезьян с форума которые в порыве доказать, что они что-то знают будут драться и спорить друг с другом за возможность донести свою истину. Эти ребята очень умело играют на казалось бы «умных» обитателях подобных ресурсов.

anonymous
()
Ответ на: комментарий от anonymous

интересная теория, но самому загуглить/разобраться натурально в 100раз быстрее, даже не учитывая того, что на лоре тебе напишут какую-то херню наиболее вероятно

anonymous
()
Ответ на: комментарий от anonymous

Ну если этот «умный» игрок доволен качеством знаний, которые ему тут вперемешку напишут разные люди с разным уровнем знаний да еще и каждый по своему вопрос понимает - то тогда этот игрок глупее, чем местные обитатели.

anonymous
()
Ответ на: комментарий от anonymous

И тем не менее ему каждый раз разжевывают его вопросы, чего бы ему не быть довольным, ничего не надо искать, просто вбрасывай вопросы и жди пока стая обезьян придет к общему знаменателю.

anonymous
()
Ответ на: комментарий от anonymous

чушь. бред. всегда прислушиваюсь к советам форумчан. для меня их опыт приобретенный на практике ценнее тысячи статей из гугла написанных псевдотеоретиками.

сюда я захожу учиться. я учусь у людей. некопирую, а учусь.

Assembler
() автор топика
Ответ на: комментарий от anonymous

Купился на пропаганду анусов-доцентов?

Ты перечитай тема этого недалекого асембояриста. Он к вам через пожалуйста всегда.

Эти погани, что заходят в его темы сдрасивают вам, чтобы вы непомогали ему.

Почему? Я бы задумался.

anonymous
()
Ответ на: комментарий от anonymous

Неверно.

Компилятор С++ украсит имя любой фукции.

anonymous
()
Ответ на: комментарий от Assembler

Зайди к разработчикам. Может если поподешь под хорошее настроение, то об’яснят.

Хотя такое чувство, что у них всегда критические дни, что влечет перепады настроения, и приступы ненависти особенно к новечкам. Могут бан влепить просто если запятэ не там поставил. Ну вобщем все как с моей женой.

anonymous
()
Ответ на: комментарий от Assembler

ЕСлИ не знаешь, что значит _Z то Забанься дябил.

Хотя я тоже не знаю.

anonymous
()
Ответ на: комментарий от anonymous

Милостевый государь, кого эт вы обезьянами считаете? Почему бы вам и вашему собеседнику несьебать отсюда? Идите к людям. А мы уж тут сами.

Или ссыте, что окончательно в ваши сказки, мы макаки перестанем верить? Я из принципа скажу, что _Z С++ ставит везде где изменил имя. Это как знак того что имя изменено. Знал бы больше, больше бы и сказал.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.