- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
unsigned strlen(const char *str)
{
const char *ptr;
for (ptr = str; *ptr; ++ptr);
return ptr - str;
}
char *strcpy(char *dst, const char *src)
{
while((*dst++ = *src++) != 0);
return dst;
}
namespace std
{
class string
{
public:
string(const char *str = 0) : size(str ? strlen(str) : 0)
{
this->str = new char[size + 1];
if(str) strcpy(this->str, str);
else this->str[0]=0;
}
string(const string &str) : size(str.size)
{
this->str = new char[size +1];
strcpy(this->str, str.str);
}
~string()
{
delete[] str;
}
const char* c_str() const
{
return str;
}
private:
char *str;
unsigned size;
};
class Cout
{
public:
Cout &operator<< (const char *str)
{
unsigned len = strlen(str);
asm volatile (
"movl $0x04, %%eax\n"
"movl $0x01, %%ebx\n"
"int $0x80\n"
:
: "c"(str), "d"(len));
return *this;
}
Cout &operator<< (const string &str)
{
operator<< (str.c_str());
return *this;
}
} cout;
}
int main()
{
std::string str = "Hello World!";
std::cout << str << "\n";
return 0;
}
bormand 09.11.2015 20:07 # +2
bormand 09.11.2015 20:17 # 0
CHayT 09.11.2015 20:48 # 0
всю логику делать на кт315
bormand 09.11.2015 21:05 # 0
kegdan 09.11.2015 21:08 # 0
bormand 09.11.2015 21:10 # 0
kegdan 09.11.2015 21:26 # 0
CHayT 09.11.2015 22:24 # 0
roman-kashitsyn 11.11.2015 18:08 # +2
Stallman 09.11.2015 22:07 # 0
inkanus-gray 09.11.2015 22:21 # 0
Koncord 10.11.2015 23:29 # 0
Koncord 10.11.2015 23:34 # 0
guest 10.11.2015 00:22 # +1
А не люблю AT&Tшный синтаксис
bormand 10.11.2015 06:23 # 0
guest 10.11.2015 13:35 # +4
3.14159265 10.11.2015 14:16 # +2
Но всё же "Царь переносимого кода" звучало бы посильнее. С учётом местной специфики
Koncord 10.11.2015 23:24 # 0
bormand 10.11.2015 23:50 # 0
Koncord 11.11.2015 00:07 # 0
bormand 11.11.2015 00:15 # 0
Ну там sysenter был.
bormand 11.11.2015 00:20 # 0
bormand 11.11.2015 00:47 # +1
Antervis 11.11.2015 06:21 # 0
Koncord 11.11.2015 11:51 # 0
TarasB 11.11.2015 14:41 # 0
bormand 11.11.2015 17:56 # +2
На самом деле, в винде точно так же. Все эти kernel32.dll и.т.п. просто более высокоуровневые обёрточки над сисколлами, которые можно дёргать через int/sysenter/syscall.
TarasB 12.11.2015 11:07 # 0
bormand 12.11.2015 17:09 # +1
А ОП как раз таки захотел написать прогу, которая не будет юзать все эти сахарные so'шки, а будет общаться только с ядром операционки.
TarasB 12.11.2015 17:14 # 0
Отсутствие одного заголовка не мешает самому подключиться к нужным сошкам.
bormand 12.11.2015 17:16 # 0
> одного заголовка
Ну и саму либу он тоже не линкует к проге.
bormand 11.11.2015 18:08 # 0
bormand 11.11.2015 21:09 # 0
http://ideone.com/UNXSt1
P.S. ideone не даёт опции задавать, поэтому main().
bormand 11.11.2015 21:31 # +1
inkanus-gray 11.11.2015 21:50 # 0
bormand 11.11.2015 21:58 # 0
Но интеграция того стоит - гцц старается, чтобы значения в нужных регистрах вовремя оказались и т.п. И в дизасме вставка не выглядит инородным телом, как в той же вижуалке.
inkanus-gray 11.11.2015 22:05 # 0
bormand 11.11.2015 22:09 # +1
Кстати, там же не только конкретные регистры можно писать, но и полезные штуки типа "любой регистр", "память", "память или регистр" и т.п.
Koncord 12.11.2015 02:33 # +1
http://pastebin.com/CZGq2pLw
Парсер BBCode лох
"игнорировать \n" читай как "игнорировать \0"
Koncord 12.11.2015 02:38 # +1
PS. код писал давно.
imihajlov 12.11.2015 10:36 # +2
TarasB 12.11.2015 11:08 # 0
Koncord 12.11.2015 11:42 # 0
bormand 12.11.2015 17:07 # +1
TarasB 12.11.2015 17:15 # 0
Koncord 12.11.2015 02:36 # 0
PS. Точка входа в Linux не main, а _start.
bormand 12.11.2015 06:16 # +2
Но я же написал, почему там main... ideone команду компилятора не даёт поправить.
Koncord 12.11.2015 08:03 # +2
Вот тут можно задать свои ключи.
Koncord 12.11.2015 11:57 # +2
bormand 12.11.2015 17:14 # +1
Koncord 12.11.2015 18:55 # 0
bormand 12.11.2015 19:18 # 0