我最近正在阅读一个OCaml项目,我想把源文件放在utop中,这样我就可以做一些实验了.
假设我有两个文件amodule.ml,bmodule.ml.
bmodule.ml将使用amodule.ml中定义的函数,例如,bmodule使用Amodule.anyfunction(),其中anyfunction()在amodule.ml中定义.
我想把它们都放在utop中:
#directory "/directory contain amodule.ml and bmodule.ml"
#use "amodule.ml"
#use "bmodule.ml"
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为Amodule是amodule.ml文件的模块名称,utop不知道这些东西,我想.
那么如何在不改变文件内容的情况下将这些文件放在utop中呢?
最近我正在做一些基于文件的Return-to-libc攻击实验.在使用我的Ubuntu11.10 使用return-to-libc时,在开发过程中绕过非可执行堆栈.
在我的实验之前,我关闭了ALSR.
根据文章,我可以在gdb中找到环境变量SHELL ="/ bin/bash"的地址(使用gdb来调试我要攻击的程序):


但是当我尝试将它用于Return-to-libc实验时,我发现这个地址是错误的.
然后我编写一个简单的程序来获取环境变量地址:

当我在终端中运行这个程序时,我得到了正确的地址:
有了这个地址,我可以进行攻击.
我也找到了相关的问题.但答案并没有多大意义(第二个可能更好).
请告诉我一些关于此的细节.
在我的32位x86 Ubuntu11.10上,gcc4.6.3通过堆栈传递参数.是否存在强制gcc通过寄存器传递参数的gcc优化?那gcc怎么做到的?我想要一些细节.
我是OCaml的新手.当我在Ocaml中使用数组进行编码时,我遇到了一个我无法理解的问题.
这是代码:
let a = Array.create 5 (Array.create 5 0);
a.(0).(1) <- 1
Run Code Online (Sandbox Code Playgroud)
我只想将1分配给[0] [1]但事情发生了:第一个colummn中的所有元素都已分配.也就是说,代码后[0] [1],[1] [1],[2] [1],[3] [1]和[4] [1]都等于1以上执行.
如果我使用以下方法创建数组:
Array.make_matrix 5 5 0
Run Code Online (Sandbox Code Playgroud)
一切都好.
我的环境:
Ubuntu 13.10
Ocaml 4.01.0
open Core.Std
Run Code Online (Sandbox Code Playgroud) 最近我必须阅读一些用OCaml编写的源代码.在阅读有关OCaml的资料后,我开始阅读源代码.当我编译源代码时,出现了问题.编译器错误的部分如下:
设b = [| 0X2; 0xC的; 0XF0; 为0xFF00; 为0xffff0000; 0x7fffffff00000000 |]
错误消息表明这是一个整数范围问题.我知道OCaml中的整数范围是-2 ^ 30~2 ^ 30 - 1,因而导致了这个问题.但源代码来自其他人可以使用它的项目.我怎样才能正确编译?有人可以告诉我一些细节吗?
我正在尝试构建一个可以为许多客户服务的服务器.
服务器只做一个简单的工作:从客户端获取输入字符串,然后将每个字母更改为大写.
但问题是,当我尝试关闭一个客户端时,例如,键入"Ctrl-C",然后我的操作系统将突然关闭.
我使用Ubuntu 10.10和CentOS来测试我的程序,但总是同样的问题.这是我的源代码:
/* client.c */
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main (void)
{
struct sockaddr_in servaddr, cliaddr;
char buf[MAXLINE];
int sockfd, n;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port = htons(SERV_PORT);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
while (fgets(buf, MAXLINE, stdin) != NULL) {
write(sockfd, buf, strlen(buf));
n = read(sockfd, buf, MAXLINE);
if(n == 0) …Run Code Online (Sandbox Code Playgroud)