gsoap一处bug引起的崩溃分析

近日,现场有人反映,平台某服务器出现一次崩溃,不过由于看门狗的存在,又自动重启了,听到此消息也比较诧异,因为这台服务器已经运行两三个月了,突然崩溃一次,而后面再怎么操作又没问题了,想必是个极难出现的bug,跟现场确认没有进行过什么特殊操作,且没有安装卸载任何程序后,就让现场把dmp文件发回来,进行仔细分析。Dmp文件很大,约1.54个G,这个我还是比较乐意看到的,因为dump文件越大,说明包含
摘要由CSDN通过智能技术生成

近日,现场有人反映,平台某服务器出现一次崩溃,不过由于看门狗的存在,又自动重启了,听到此消息也比较诧异,因为这台服务器已经运行两三个月了,突然崩溃一次,而后面再怎么操作又没问题了,想必是个极难出现的bug,跟现场确认没有进行过什么特殊操作,且没有安装卸载任何程序后,就让现场把dmp文件发回来,进行仔细分析。

Dmp文件很大,约1.54个G,这个我还是比较乐意看到的,因为dump文件越大,说明包含的信息越多,越便于分析。

打开windbg,设置好符号路径后,输入!analyze –v 进行分析,稍等片刻,windbg便给出了初步的分析结果。

 

从图中可以看出很多信息,崩溃原因还是一如既往的0xc000005 访问违例,崩溃的行数为70c7f8d    mov eax,dword ptr [eax+10h] 这行,把eax+10指向的四字节内存读取到eax中,那最大的可能就是eax的值有问题了,用.ecxr切换至异常所在上下文,然后输入r查看寄存器:

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用 gSOAP 可以很方便地创建 Web 服务端点。下面是一个简单的示例,展示了如何使用 gSOAP 创建一个 Web 服务端点: 1. 首先,需要安装 gSOAP 库,并使用 wsdl2h 工具从 WSDL 文件生成 C/C++ 头文件。 2. 在生成的头文件中定义 Web 服务端点的接口。 ```c // MyWebService.h // This file was generated with the command: wsdl2h -o MyWebService.h http://example.com/MyWebService.wsdl // This file should be included in the server and client applications. #ifndef MyWebService_H #define MyWebService_H #include "soapStub.h" // gSOAP runtime header int ns__add(struct soap* soap, double a, double b, double& result); #endif // MyWebService_H ``` 3. 在实现文件中实现 Web 服务端点的接口。 ```c // MyWebService.cpp #include "MyWebService.h" int ns__add(struct soap* soap, double a, double b, double& result) { result = a + b; return SOAP_OK; } ``` 4. 在 main 函数中启动 Web 服务端点。 ```c // main.cpp #include "soapH.h" #include "MyWebService.h" int main() { // Initialize the gSOAP runtime struct soap soap; soap_init(&soap); // Register the Web service function ns__add with the gSOAP runtime soap_register_ns__add(&soap, ns__add); // Bind the Web service to a TCP port and listen for connections if (soap_bind(&soap, NULL, 8888, 100) < 0) { soap_print_fault(&soap, stderr); exit(1); } // Handle incoming HTTP requests indefinitely while (true) { soap_accept(&soap); soap_serve(&soap); soap_end(&soap); } // Free the gSOAP runtime resources soap_done(&soap); return 0; } ``` 这个示例中,我们实现了一个名为 "add" 的 Web 服务端点,可以接受两个浮点数作为输入参数,并返回它们的和。我们通过在 main 函数中注册和绑定该服务端点,将其绑定到本地的 TCP 端口 8888,并启动一个循环来处理传入的 HTTP 请求。 使用 gSOAP 可以很方便地创建 Web 服务端点,而且可以在不同的编程语言之间共享 Web 服务。但是,由于 gSOAP 需要使用 SOAP 协议,因此可能存在一些性能上的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值