Articles of 堆栈

如何在保持相同url的同时代理nginx请求

我正在使用这个configuration自我托pipe的服务堆栈应用程序。 所以当我浏览mysite.com/json/reply/mytestmethod时,我被redirect到mysite.com:1337/json/reply/mytestmethod。 该应用程序工作正常,除了寻找帮助删除端口1337部分,并使其似乎来自mysite.com域。 干杯! server { listen 80; server_name mysite.com; root /var/www/mysite.com/html; index index.html; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:1337; } }

函数是否存在读取自我处理的地址范围?

在linux上有没有可用的函数来获得有关当前进程[stack]信息的addess范围的信息,就像/ proc / self / maps文件[stack]部分一样? 看待。

gdb:检查堆栈和小端澄清

我正在研究一个程序的内存布局。 我正在使用gdb来检查一个小端(intel x86_64)Linux(32位)机器中的堆栈。 但是,我不能理解这个处理器和gdb的大端和小端的概念。 我的示例程序是: 1 #include<stdio.h> 2 3 int main(int argc, char **argv) { 4 int a = 5; 5 char b[] = "ABCDEFGH"; 6 7 return 0; 8 } [Code – 1] 以下指令序列在gdb中执行。 (gdb) b 7 Breakpoint 1 at 0x8048434: file args.c, line 7. (gdb) r Breakpoint 1, main (argc=1, argv=0xbffff4f4) at args.c:7 […]

运行“无限堆栈”大小的应用程序的效果是什么?

我inheritance了一些我需要维护的代码,有时候可能不稳定。 以前的人不再可以查询为什么他们在无限的堆栈设置的环境中运行应用程序,我很好奇这可能是什么效果? 应用程序似乎有一些不可预知的内存错误,我们无法find并在Valgrind下运行该应用程序不是一个选项,因为它减慢了应用程序的下降,我们实际上不能运行它。 所以任何想法,这可能是什么效果,赞赏。

Linux内核中的硬件中断堆栈上半部分?

我知道Linux内核在2.6.32之前把线程内核栈作为ISR栈,在2.6.32之后,内核使用分离栈,如果错了请纠正我。 你会告诉我什么时候ISR堆栈被设置/设置,或者如果有的话就销毁。 或者告诉我源文件名和行号? 提前致谢。 2014年10月17日更新: Linux中有几种堆栈。 下面是我知道的3个主要(不是全部)。 用户空间进程栈,每个用户空间任务都有自己的栈,这是在任务创build时由mmap()创build的。 内核栈为用户空间任务,每个用户空间任务一个,在do_fork() – > copy_process() – > dup_task_struct() – > alloc_thread_info()内创build并用于system_call。 在arch / x86 / kernel / irq_32.c中定义的每个CPU(2.6之后)的硬件中断堆栈(上半部分): DEFINE_PER_CPU(struct irq_stack *, hardirq_stack); do_IRQ() – > handle_irq() – > execute_on_irq_stack()切换中断堆栈 请让我知道这些是否正确。

为什么Linux的堆栈区有可执行的保护?

在研究Linux内核时,我发现默认情况下,可执行文件有一个“可执行的”堆栈区域。 我自然认为唯一的(必要的)可执行区域是文本部分。 有没有与此有关的历史原因,或有任何实际用法?

为什么堆栈通常会向下扩展?

我知道,在我个人熟悉的架构(x86,6502等)中,堆栈通常会向下增长(即每个物品被压入堆栈导致递减的SP,而不是递增的)。 我想知道这个历史的理由。 我知道在一个统一的地址空间中,在数据段的另一端(比如说)启动堆栈是很方便的,所以如果双方在中间相互碰撞只会有问题。 但是,为什么堆栈传统上得到顶部? 特别是考虑到这与“概念”模式相反吗? (请注意,在6502架构中,堆栈也向下增长,即使它被限制在一个256字节的页面上,这个方向的select似乎是任意的)。

为什么我的堆栈框架有很大的差距?

我试图debugging发生在我的程序中的堆栈损坏(我的猜测)。 当我映射堆栈上的所有本地variables位置。 我看到了一些变数之间的差距。 Var Stack Address sp 47f0360 msg 47f0370 p 47f0378 < Small gap > key 47f03d0 conn 47f03e8 tmpkey 47f03f0 < Gap > tbl1 47f0a30 ret 47f0a3c tbl 47f0a40 tmpPtr 47f0a48 conn_timer 47f0a50 req 47f0a58 msgHdr 47f0a60 rspMsg 47f0a68 p_wrk 47f0a70 rsp 47f0a78 bp 47f0a90 没有看源代码,是否有可能猜测这种差距的任何原因。 任何非标准,非平凡的模式,可以给一些线索?

什么是存储在线程的堆栈?

我现在正在学习线程,并且对存储在线程堆栈中的内容感到困惑。 它只是它自己的一组局部variables? 谢谢

如何访问/打印main中的辅助vector条目?

根据图像,堆栈在启动时填充辅助vector条目。 我以前不知道。 我如何访问/打印它们? int main(int argc, char *argv[], char *envp[]); 这是否意味着main有一个隐藏的第四个参数?