我正在查看来自不安全编程的示例abo3.c,并且我没有在下面的示例中讨论转换.有人可以开导我吗?
int main(int argv,char **argc)
{
extern system,puts;
void (*fn)(char*)=(void(*)(char*))&system;
char buf[256];
fn=(void(*)(char*))&puts;
strcpy(buf,argc[1]);
fn(argc[2]);
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
那么 - 系统的投射和投注是什么?他们都回归了int,为什么要把它变成无效?
我非常感谢对整个计划的解释.
[编辑]
感谢您的投入!
Jonathan Leffler,实际上代码有"坏"的原因.它应该是可利用的,溢出缓冲区和函数指针等.mishou.org有一篇关于如何利用上述代码的博客文章.其中很多仍然在我头上.
bta,我从上面的博客文章中得知,转换系统会以某种方式阻止链接器删除它.
有一点不能立即明确的是系统和放置地址都写在同一个位置,我想这可能是gera所说的"所以链接器不会删除它".
虽然我们讨论的是函数指针的主题,但现在我想问一个后续问题,即语法更清晰.我正在使用函数指针查看一些更高级的示例,并偶然发现这个可憎的东西,取自托管shellcode的站点.
#include <stdio.h>
char shellcode[] = "some shellcode";
int main(void)
{
fprintf(stdout,"Length: %d\n",strlen(shellcode));
(*(void(*)()) shellcode)();
}
所以数组被强制转换为函数返回void,引用和调用?这看起来很讨厌 - 所以上面代码的目的是什么?
[/编辑]
这是家庭作业,虽然已经提交了不同的方法.
我从Visual Studio 2008获得以下内容
error C2893: Failed to specialize function template 'void std::sort(_RanIt,_RanIt,_Pr)'
代码如下
main.cpp
Database<> db;
db.loadDatabase();
db.sortDatabase(sort_by_title());
Database.cpp
void Database<C>::sortDatabase(const sort_by &s) {
std::sort(db_.begin(), db_.end(), s);
}
并且函数对象被定义为
struct sort_by : public std::binary_function<const Media *, const Media *, bool> {
virtual bool operator()(const Media *l, const Media *r) const = 0;
};
struct sort_by_title : public sort_by {
bool operator()(const Media *l, const Media *r) const { ... }
};
...
这里有什么治疗方法?
[编辑]对不起,也许我应该明确继承
template <typename C = std::vector<Media …
c++ inheritance functor specialization template-specialization
我想知道如何编写一个接受任何STL输入迭代器的自定义类(在本例中是一个链表)的构造函数.我已经创建了一个与我的List类绑定的自定义Iterator类.
这很好用.
template <typename T>
List<T>::List(Iterator beg, Iterator end) : first_(0) {
while (beg != end)
insertLast(*beg++);
}
Run Code Online (Sandbox Code Playgroud)
我已经设法创建一个接收这样的列表迭代器的构造函数.
List<T>::List(typename list<T>::iterator s, typename list<T>::iterator e) :
first_(0) {
while (s != e)
insertLast(*s++);
Run Code Online (Sandbox Code Playgroud)
我的STL-fu对于如何将其概括为接受任何输入迭代器并没有真正意义上的
任何帮助吗?
谢谢!
c++ ×2
c ×1
casting ×1
constructor ×1
functor ×1
inheritance ×1
iterator ×1
shellcode ×1
stl ×1
void ×1