小编Ric*_*ton的帖子

Linux下的伪随机堆栈指针?

当我注意到一些奇怪的东西时,我正在玩一些代码:

[~] main% cat test.cc
#include <stdio.h>

void f()
{
    int i;
    fprintf(stderr, "&i = 0x%08X\n", (long)&i);
}

int main(int argc, char**argv)
{
    f();
}
[~] main% g++ test.cc
[~] main% ./a.out
&i = 0xBFA27AB4
[~] main% ./a.out
&i = 0xBFAD7E24
[~] main% ./a.out
&i = 0xBFCA3464
[~] main% ./a.out
&i = 0xBF96C064
[~] main%
Run Code Online (Sandbox Code Playgroud)

对我来说奇怪的是变量i的地址变化.

我的猜测是内核提供不同的堆栈起始地址以试图阻止某种破解.真正的原因是什么?

linux stack

8
推荐指数
1
解决办法
1088
查看次数

关于`({});`的更多信息?

我注意到有时候,C宏写得像这样:

#define foo(bar) ({ ++bar; })
Run Code Online (Sandbox Code Playgroud)

经过一些实验,我发现:

  1. ({});会编译,但什么都不做.(正如所料.)
  2. 离开;将导致语法错误.这样做的副作用是确保foo()看起来像代码中的函数.(虽然,如果你关闭分号,错误对诊断问题不是很有用!)
  3. return ({}); 抱怨虚假值不被忽略,就像我试图使用void函数一样.

这只是为了让开发人员在他们的宏中添加分号,还是有另一个目的?我已经尝试过谷歌,但是标点符号失败了.这有名字吗?

c macros gcc

8
推荐指数
1
解决办法
248
查看次数

构建ELLCC时出错

build从ELLCC 运行脚本会导致此错误

gcc -DHAVE_CONFIG_H -I. -I../../../src/binutils/binutils  -I. -I../../../src/binutils/binutils -I../bfd -I../../../src/binutils/binutils/../bfd -I../../../src/binutils/binutils/../include -I./../intl -DLOCALEDIR="\"/Library/Caches/Homebrew/ellcc--svn-HEAD/lib/share/locale\"" -Dbin_dummy_emulation=bin_vanilla_emulation  -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -Wno-unused-value -Wno-shadow  -MT nm.o -MD -MP -MF .deps/nm.Tpo -c -o nm.o ../../../src/binutils/binutils/nm.c
../../../src/binutils/binutils/nm.c:1690:28: error: 'sbrk' is deprecated
      [-Werror,-Wdeprecated-declarations]
      char *lim = (char *) sbrk (0);
                           ^
/usr/include/unistd.h:582:7: note: 'sbrk' declared here
void    *sbrk(int);
         ^
Run Code Online (Sandbox Code Playgroud)

以下编译器使用了相同的结果:

  • gcc 4.8
  • llvm-gcc 2.8
  • llvm 3.3

macos clang cross-compiling binutils ellcc

5
推荐指数
2
解决办法
3948
查看次数

建议添加对C++的状态机支持 - 就像语言一样

最近作为我日常工作的一部分,我一直在学习IBM Rhapsody并使用它从UML生成C++代码.

昨天让我感到震惊的是,考虑将状态机支持添加到我的C++编译器可能会很酷,所以我在这里写了一些注释:http://ellcc.org/wiki/index.php/State_machines_and_Active_Classes

我这样做的动机是:

  1. 这似乎是一个很酷的主意.
  2. 编译器可以比当前的Rhapsody /普通C++编译器做更好的语义检查(具有更好的错误检查).
  3. 当编译器本身理解状态机结构时,有许多可用的优化可能性.

我可能会尝试扩展我的语法,除了提议看看它的工作情况.

您对该提案有何看法?它看起来可读吗?看起来值得吗?


编辑:

感谢建议特定库来执行状态机的答案,但这不是我的问题.我已经使用我编写的库和代码实现了许多状态机.

我真的在寻找关于设计类似C++的语言的状态机扩展的想法,批评等,而不是这种改变是否适合添加到标准C++.可以将其视为特定于域的扩展,我的域名是实时控制应用程序.

我已经开始在我的编译器中实现扩展,如下所述:http://ellcc.org/wiki/index.php/State%5Fmachines%5Fand%5FActive%5FClasses

到目前为止,这个概念不需要从提议到实现有太大的变化,但细节上有一些变化,我正在完善我对问题语义的理解.

然而,时间将证明整个概念是否具有任何价值.;-)

c++ compiler-construction uml language-design state-machine

1
推荐指数
1
解决办法
580
查看次数