gcc

What is __libc_start_main and _start?

让人想犯罪 __ 提交于 2021-02-18 16:58:08
问题 From the past few days I have been trying to understand what happens behind the curtain when we execute a C program. However even after reading numerous posts I cannot find a detailed and accurate explanation for the same. Can someone please help me out ? 回答1: You would usually find special names like this for specific uses when compiling and linking programs. Typically, something like _start would be the actual entry point for an executable, it will be located in some object file or library

How to declare and initialize local variables in gcc inline assembly without extended inline asm?

孤人 提交于 2021-02-18 12:20:14
问题 I know this is a very basic question but I am really stuck on it. In fact I am absolutely newbie in GCC syntax. I want to have local variables (Stack addresses with labels) without using extended inline assembly. Something like the following code in Intel syntax: DATA1 DB 100 MOV AL, DATA1 This is the code I guess may substitute in GCC: int someFunction(int x) { __asm__ volatile( "function1:" ".data;" ".2byte $4 data1 ;" ".text;" "pushq %rbp;" "movq %rsp , %rbp ;" "movl var , %eax;" // this

gcc ld: method to determine link order of static libraries

天大地大妈咪最大 提交于 2021-02-18 11:57:33
问题 My executables are linked with many static libraries, typically between 50 and 100 archives on Linux. Occasionally there are dependency cycles in these archives. The order that these libraries appear on the link command line is significant, see here. Attempting to manually order this many libraries is time-consuming at minimum, especially when there are cycles present. Question: is there a utility or technique that will analyze a code base and produce a correct link command line ordering? 回答1

2017-2018-2 20179226 《网络攻防》第11周作业

冷暖自知 提交于 2021-02-18 10:45:20
研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 原理 在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了。向缓冲区内填充数据,如果数据的长度很长,超过了缓冲区本身的容量,那么数据就会溢出存储空间,而这些溢出的数据还会覆盖在合法的数据上,这就是缓冲区和缓冲区溢出的道理。 对抗缓冲区溢出攻击 1、栈随机化   为了在系统中插入攻击代码,攻击者不但要插入代码,还要插入指向这段代码的指针,这个指针也是攻击字符串的一部分。产生这个指针需要知道这个字符串放置的栈地址。在过去,程序的栈地址非常容易预测,在不同的机器之间,栈的位置是相当固定的。 栈随机化的思想使得栈的位置在程序每次运行时都有变化。因此,即使许多机器都运行相同的代码。它们的栈地址都是不同的。 实现的方式是:程序开始时,在栈上分配一段0--n字节之间的随机大小空间。程序不使用这段空间,但是它会导致程序每次执行时后续的栈位置发生了变化。 在Linux系统中,栈随机化已经变成了标准行为。(在linux上每次运行相同的程序,其同一局部变量的地址都不相同) 2、栈破坏检测   在C语言中,没有可靠的方法来防止对数组的越界写,但是,我们能够在发生了越界写的时候,在没有造成任何有害结果之前,尝试检测到它。 最近的GCC版本在产生的代码中加入了一种栈保护者机制

盘点全球最厉害的 14 位程序员大神,请收下我的膝盖~

巧了我就是萌 提交于 2021-02-18 09:50:08
全球最厉害的14位程序员是谁,您知道的有几位呢? 以下排名不分先后: 1. Jon Skeet 个人名望: 程序技术问答网站Stack Overflow总排名第一的大神,每月的问答量保持在425个左右。 个人简介/主要荣誉: 谷歌软件工程师,代表作有《深入理解C#(C# In Depth)》。 网络上对Jon Skeet的评价: “他根本不需要调试器,只要他盯一下代码,错误之处自会原形毕露。” “如果他的代码没有通过编译的时候,编译器就会道歉。” “他根本不需要什么编程规范,他的代码就是编程规范。” 2. Gennady Korotkevich 个人声望: 编程大赛神童 个人简介/主要荣誉: 年仅11岁时便参加国际信息学奥林比克竞赛,创造了最年轻选手的记录。在2007-2012年间,总共取得6枚奥赛金牌;2013年美国计算机协会编程比赛冠军队成员;2014年Facebook黑客杯冠军得主。截止目前,稳居俄编程网站Codeforces声望第一的宝座,在TopCoder算法竞赛中暂列榜眼位置。 网络上对Gennady Korotkevich的评价: “一个编程神童。” “他太令人惊讶了,他相当于我在白俄罗斯建立了一支强大的编程队伍” “彻底的编程天才” 3. Linus Torvalds 个人名望: Linux之父 个人简介/主要荣誉: Linux和Git之父,一个开源的操作系统;

全球最厉害的14位程序员,大神收下我的膝盖

冷暖自知 提交于 2021-02-18 09:10:31
导读: 全球最厉害的14位程序员是谁?一起来看下让我们膜拜的这些大神都有哪些? 排名不分先后。 01 Jon Skeet 个人名望: 程序技术问答网站Stack Overflow总排名第一的大神,每月的问答量保持在425个左右。 个人简介/主要荣誉: 谷歌软件工程师,代表作有《深入理解C#(C# In Depth)》。 网络上对Jon Skeet的评价: “他根本不需要调试器,只要他盯一下代码,错误之处自会原形毕露。” “如果他的代码没有通过编译的时候,编译器就会道歉。” “他根本不需要什么编程规范,他的代码就是编程规范。” 02 Gennady Korotkevich 个人声望: 编程大赛神童 个人简介/主要荣誉: 年仅11岁时便参加国际信息学奥林比克竞赛,创造了最年轻选手的记录。在2007-2012年间,总共取得6枚奥赛金牌;2013年美国计算机协会编程比赛冠军队成员;2014年Facebook黑客杯冠军得主。截止目前,稳居俄编程网站Codeforces声望第一的宝座,在TopCoder算法竞赛中暂列榜眼位置。 网络上对Gennady Korotkevich的评价: “一个编程神童。” “他太令人惊讶了,他相当于我在白俄罗斯建立了一支强大的编程队伍。” “彻底的编程天才。” 03 Linus Torvalds 个人名望: Linux之父 个人简介/主要荣誉:

__attribute__((section(“name”))) usage?

我们两清 提交于 2021-02-18 00:49:09
问题 I have ran through code that use _ attribute _((section("name")). I understand that for gcc compiler this allows you to tell the linker to put the object created at a specific section "name" (with "name" absolute address declared in a linker file). What is the point of doing this instead of just using the .data section? 回答1: There are many possible uses. [Edit to add note: this is just a sample of uses I've seen myself or considered, not a complete list.] The Linux kernel, for instance, marks

关于汇编语言

孤街浪徒 提交于 2021-02-17 19:42:14
学习编程其实就是学高级语言,即那些为人类设计的计算机语言。 但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。 计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。 汇编语言不容易学习,就连简明扼要的介绍都很难找到。下面我尝试写一篇最好懂的汇编语言教程,解释 CPU 如何执行代码。 一、汇编语言是什么? 我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。 这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。 对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。 汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。 二、来历 最早的时候,编写程序就是手写二进制指令,然后通过各种开关输入计算机,比如要做加法了

How can I determine if the operating system is POSIX in C?

送分小仙女□ 提交于 2021-02-17 08:46:34
问题 Related questions How can I detect the operating system in C/C++? How can I find out what operating system I am running under in GCC or in ANSI C? I'd be fine If I can know if I'm running on POSIX. UPDATE: It doesn't make a difference to me whether it is at compile time or run time. I'm using this in a debug routine, so performance isn't that important. I'm looking for the path separator. Windows & Unix/Linux/BSD would be fine. And, I'm trying to find the basename on a path. I found some

Inline assembly multiplication “undefined reference” on inputs

风流意气都作罢 提交于 2021-02-17 07:15:08
问题 Trying to multiply 400 by 2 with inline assembly, using the fact imul implicity multiplies by eax . However, i'm getting "undefined reference" compile errors to $1 and $2 int c; int a = 400; int b = 2; __asm__( ".intel_syntax;" "mov eax, $1;" "mov ebx, $2;" "imul %0, ebx;" ".att_syntax;" : "=r"(c) : "r" (a), "r" (b) : "eax"); std::cout << c << std::endl; 回答1: Do not use fixed registers in inline asm, especially if you have not listed them as clobbers and have not made sure inputs or outputs