- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有人知道为什么会发生这种情况吗?
我在 AIX 5.3 中有一个 C 程序,我被要求在 SPARC Solaris 10 机器上运行它,但是当我这样做时,我注意到有一个缓冲区溢出,这是许多不计后果的 strcat 使用之一。我的目标不是清理代码,而是提供一个具体且有根据的答案,说明为什么这种溢出发生在 Solaris 而不是 AIX 上,是完全相同的错误编码程序。
我已经阅读了一些有关这是否可能由以下原因引起的信息:
AIX 和 Solaris 之间的字节顺序差异。
执行 strcat 函数(AIX 从右向左复制,Solaris 从左向右复制),但我找不到任何关于此的文档。
非常感谢您对此提供任何启发。
编辑:这可以通过 solaris 上的 noexec_user_stack 标志来避免吗?
编辑 2:有没有人知道这两种操作系统进行实际字节复制的方式?在类似上述选项 2 的情况下?
编辑 3:这是代码块:
/*global*/<br/>
char bufferA[101];<br/>
/*inside function*/<br/>
bufferA[0]='\0';<br/>
strcpy(bufferA,"1");<br/>
if (atoi(something)==0) {<br/>
strcat(bufferA,pieces_of_data);<br/>
count ++ ;<br/>
}
显然还有更多,但这是唯一使用 bufferA 的部分,并且有 2 个在 bufferA 之后声明为全局的变量随着附加到 bufferA 的最后一个字符串的最后部分而损坏。
正如我之前所说,如果我将声明从 101 更改为 201,则不会发生损坏。
编辑 4:有人知道 solaris 上的 -misalign 和 -misalign2 编译器选项吗?这些选项可以有任何亮点吗?实际上一个更好的问题是:AIX powerPC 和 Solaris SPARC 在对齐方面有什么不同吗?虽然这可能是服务器故障的问题,但如果您知道的话请分享。
最佳答案
要么是(坏?)运气,要么是内存管理系统略有不同的产物,在 AIX 上分配的空间比在 Solaris 上分配的空间多。
这部分取决于溢出的严重程度。如果它们有几个字节超出范围并且如果 AIX 习惯性地分配,比方说,32 字节的最小块,而 Solaris 分配 16 字节的最小块,那么在 AIX 上没有损坏的错误空间比在索拉里斯。即便如此,如果您在错误的上下文中弄错了,AIX 也应该有问题 - 您可以认为自己很不幸没有在 AIX 上观察到这个问题,因为正如您所说,它肯定会在那里发生,就像它确实发生的那样如果您正在编译的源代码相同,则在 Solaris 上。
进一步调查显示:
但是,如果您在 AIX 和 Solaris 之间更改了 32 位和 64 位构建,这可能仍然是问题的根源。
无论答案是什么,现在您已经知道了,通过一组更改为两个平台修复它。你怀着感恩的心对待每一个暴露出来的bug;在任何时候,对原始平台的更改都可能会暴露问题 - 导致客户不满意的重大问题。
(哦,我认为SPARC和PPC都是big-endian机器;Intel是little-endian,与世界其他地方不同。)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int sz ;
char *buffer;
for (sz = 1; sz < 1025; sz *= 2)
{
buffer = malloc(sz);
printf("0x%08lX\n", (unsigned long)buffer);
}
return 0;
}
关于c - AIX 5.3 与 Solaris 5.10 - C strcat 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780918/
我在AIX上使用shell脚本。 我已经使用chmod授予了执行权限 不过,我收到以下错误: ksh: ./getcwd.exe: 0403-006 Execute permission denied
我找不到 objdump IBM AIX 5.1 机器中的命令。实际上,我想从 AIX 中生成的库中获取汇编指令(反汇编)。 Linux 有 objdump命令和solaris dis命令来执行此操作
我需要在 AIX 环境中编写一个 C 程序,它会给我进程名称。 我可以根据 pid 获取 pid 但不能获取进程名称。 aix 环境中可用的任何特定系统调用? 谢谢 最佳答案 getprocs 很可能
在 AIX 上,我会运行: ar -X32 -t libdb2.a 并检查输出以确定存档中是否有 32 位对象。与 -X64 类似,用于检查 64 位对象。但是,如果我在另一个平台上,并且需要检查存档
我们需要将许多使用 Sun JDK 构建并在 Solaris 10 中的 sun JRE 上运行的 Java 应用程序迁移到 AIX。 我们担心该应用程序在 IBM J9 JRE 上的运行情况相同。
我有一些类似于以下的代码: #include #include #include #include #include #include #include #include #inclu
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我使用的是 AIX 5.3,而且我对该操作系统完全是菜鸟。我想知道 AIX 上是否有类似 inotify 的东西,以便可以监视目录和文件的更改而不是轮询。我将从 Java 中执行此操作,因此使用 Ja
AIX 中的交换信息命令:lsps -a AIX 中的交换信息输出: Page Space Physical Volume Volume Group Size %Used Acti
我有手动运行良好的脚本,但在通过 cronjob 运行时没有获得所需的输出。如果脚本有任何问题,请告诉我。 #!/usr/bin/ksh file1=$(find *-* -mtime 1) file
我正在尝试在 IBM AIX 中编译一些 C 代码,但它似乎在函数指针方面存在一些严重问题。 以下是一些无法编译的代码: typedef int (*strategy_fn)(const unsign
我有一个 C 程序 hello.c。我创建了一个共享对象 hello.so。 hello.c 和 hello.so 分别位于目录/u/grv/program/hello.c/u/grv/objects
当运行使用 -pthread 编译的代码时抛出 C++ 异常时,我们会中止。 平台:AIX 5.3 技术等级 8编译器:gcc 3.4.6链接器:AIX 链接器 1.65.2.4 测试代码: // e
我从 Centos 6 通过 ssh 连接到 AIX 5.3。AIX 和 Centos 上的 shell 是 bash。当我在 shell 中按“Home”、“End”、“PgUp”、“PgDn”时,
我运行了 lparstat 命令并得到了这个输出。需要知道要解析哪个字段以获得总体 CPU 分配、CPU 使用率、此 AIX 服务器的空闲 CPU 以及如何解析该信息。 System configur
谁能推荐可用于以编程方式检查内存使用情况的 AIX 系统调用?我正在使用一个大型多线程 C++ 应用程序,该应用程序当前由于存在大量无限的内存缓存而内存不足(在 AIX 6.1 上使用 32 位大内存
我在 AIX 6.1 上运行此代码 while(true) { int a = rand(); //generate a random integer value void* test
xmalloc只有当我编写AIX内核扩展时才能在进程环境中使用。 AIX 中中断环境可以调用哪些内存分配函数? 谢谢。 最佳答案 网络内存分配例程。查看/usr/include/net/net_mal
我在 AIX 上工作,有一个进程不断崩溃。我从未检查过核心文件,如果可能的话,我希望得到一些指导。我正在使用 dbx。我如何才能 (a) 确保核心文件到达我希望它到达的位置,以及 (b) 在崩溃之前查
通过执行一个简单的循环创建线程java程序,当我使用 -Xmx2048M 时,AIX 的线程计数限制约为 900,当我将该参数减少到 -Xmx1024M 时,线程计数限制增加到 2000 左右。 ul
我是一名优秀的程序员,十分优秀!